在特殊 XML 结构中选择具有名称属性名称的元素

本文关键字:属性 有名称 元素 选择 XML 结构 | 更新日期: 2023-09-27 18:20:46

下面是我的XML文档的结构。我只想首先获取每个节点的值<attribute name="a">然后将其与给定值进行比较。但是,我不知道如何使用 c# 中的 xml 选择节点找到每个节点的<attribute name="a">。谷歌搜索没有显示任何有效的解决方案。

<nodes>     
 <node name = "node1">      
  <attribute name="a">This is node1 a</attribute>
  <attribute name="b">This is node1 b</attribute>
 </node>
 <node name = "node2">      
  <attribute name="a">This is node2 a</attribute>
  <attribute name="b">This is node2 b</attribute>
 </node>
 ...
</nodes>     

在特殊 XML 结构中选择具有名称属性名称的元素

假设问题中的XML标记代表整个文档,您可以执行以下操作:

XmlNodeList attrElements
    = yourDocument.SelectNodes("/nodes/node/attribute[@name='a']");

您可以使用 Linq to XML,如下所示:

string xml = "<nodes>...";
var results = from node in XDocument.Parse(xml).Descendants()
          where node.Name == "attribute"
          select node.Value;

然后,您可以根据需要循环浏览结果。

这里也有一个很好的Linq to XML概述。

使用 Linq to XML:

XElement xml = XElement.Load("test.xml");
var myNodes = xml.Descendants("attribute")
                 .Where(x => x.Attribute("name").Value == "a");

检索值而不是节点:

var myValues = xml.Descendants("attribute")
                  .Where(x => x.Attribute("name").Value == "a")
                  .Select(x => x.Value);

我喜欢使用 System.Xml.XmlDocument 类进行 xml 解析。

XmlDocument doc = new XmlDocument();
doc.load("myfilename.xml");
XmlNode node = doc.SelectSingleNode("''attribute[name='a']")

您应该查看一些 XPath 参考,以确保您获得的 xpath 字符串正确 http://msdn.microsoft.com/en-us/library/ms256086.aspx