如何使用SelectSingleNode获取属性值?

Nan*_* HE 13 c# xml xpath

我正在解析一个xml文档,我需要找出gid(属性)值(3810).

基于SelectSingleNode().我发现找到属性名称和它的值并不容易.

我可以使用此方法还是必须切换到其他方式.

附上是我的代码.

如何使用bookOBJ获取属性值3810gid.谢谢.

我的test.xml文件如下

<?xml version="1.0" ?>
<root>
   <VersionInfo date="2007-11-28" version="1.0.0.2" />
   <Attributes>
      <AttrDir name="EFEM" DirID="1">
         <AttrDir name="Aligner" DirID="2">
            <AttrDir name="SequenceID" DirID="3">
               <AttrObj text="Slot01" gid="3810" unit="" scale="1" />
               <AttrObjCount value="1" />
           </AttrDir>
         </AttrDir>
      </AttrDir>
   </Attributes>
</root>
Run Code Online (Sandbox Code Playgroud)

我写了test.cs如下

public class Sample
{    
    public static void Main()
    {    
        XmlDocument doc = new XmlDocument();
        doc.Load("test.xml");

        XmlNode book;
        XmlNode root = doc.DocumentElement;

        book = root.SelectSingleNode("Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]");

        Console.WriteLine("Display the modified XML document....");
        doc.Save(Console.Out);
    }
}
Run Code Online (Sandbox Code Playgroud)

[更新06/10/2010]

  1. xml文件是一个复杂的文件.包括成千上万的gids.但对于每个Xpath,gid都是独一无二的.

  2. 我将xml文件加载到TreeView控件.this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);.当treeView1_AfterSelect事件发生时,e.Node.FullPath会返回一个字符串值.

  3. 我解析字符串值e.Node.FullPath.然后我得到了XPath Above的成员.然后我试图找到选择了哪个gid项目.

我确实需要找到gid值作为返回值.

mdm*_*dma 8

你可以写

XmlAttribute gidAttribute = (XmlAttribute)book.Attributes.GetNamedItem("gid");
String gidValue = null;
if (gidAttribute!=null)
    value = gidAttribute.Value;
Run Code Online (Sandbox Code Playgroud)

或者,展开Xpath以获取属性,例如

Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]/@gid
Run Code Online (Sandbox Code Playgroud)

如果@gid是唯一的,那么您可以简单地使用Xpath

"//AttrObj[@gid='3810']"
Run Code Online (Sandbox Code Playgroud)

获取具有给定id的所需节点.但请注意,每个请求都将搜索整个文档.获取所有节点,然后将它们放在一个由id键入的地图中会更有效.

"//AttrObj[@gid]"
Run Code Online (Sandbox Code Playgroud)

使用XmlNode.SelectNodes具有@gid属性来获取所有AttrObj的列表.


aba*_*hev 5

您可以不查询XmlDocument自身DocumentRoot

XmlDocument doc = new XmlDocument();
XmlNode book = doc.SelectSingleNode("..");
if (book != null)
{
    XmlAttribute gid = book.Attributes["gid"];
    if (gid != null)
    {
       string value = gid.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)