繁体   English   中英

如何使用SelectSingleNode获取属性值?

[英]How to get attribute value using SelectSingleNode?

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

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

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

附上是我的代码。

如何使用book obj获取gid的属性值3810 谢谢。

我的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>

我写了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);
    }
}

[更新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值作为返回值。

你可以写

XmlAttribute gidAttribute = (XmlAttribute)book.Attributes.GetNamedItem("gid");
String gidValue = null;
if (gidAttribute!=null)
    value = gidAttribute.Value;

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

Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]/@gid

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

"//AttrObj[@gid='3810']"

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

"//AttrObj[@gid]"

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

您可以查询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;
    }
}

这里的问题是他们的XPath都错了。 你有这个:

Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]

哪个会选择或不选择Attributes元素,具体取决于是否所有名称都匹配。 这个XPath应该直接带你到你想要的gid属性:

Attributes/AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']/@gid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM