Select 子节点子集的名称

Select a subset of childnodes by name

鉴于此 xml 文档

<listOfItem>
  <Item id="1"> 
    <attribute1 type="foo"/>
    <attribute2 type="bar"/>
    <property type="x"/>
    <property type="y"/>
    <attribute3 type="z"/>
  </Item>
  <Item>
   //... same child nodes
  </Item>
 //.... other Items
</listOfItems>

鉴于此 xml 文档,我想 select,对于每个 "Item" 节点,只有 "property" 个子节点。我怎样才能直接在c#中做到这一点?使用 "directly" 我的意思是不 select 对 Item 的所有子节点进行检查,然后一一检查。到目前为止:

XmlNodeList nodes = xmldoc.GetElementsByTagName("Item");
foreach(XmlNode node in nodes)
{
   doSomething()
   foreach(XmlNode child in node.ChildNodes)
   {
     if(child.Name == "property")
     {
        doSomethingElse()
     }
   }
}

尝试使用 LINQ to XML 而不是 XML DOM 因为它的语法要简单得多。

XDocument doc = XDocument.Load(filename);
foreach (var itemElement in doc.Element("listOfItems").Elements("Item"))
{
   var properties = itemElement.Elements("property").ToList();
}

您可以使用 SelectNodes(xpath) 方法代替 ChildNodes 属性:

foreach(XmlNode child in node.SelectNodes("property"))
{
    doSomethingElse()
}

Demo.