2015-05-21 38 views
4

鉴于这种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文档选择的childNodes的一个子集,我想选择,每个“项目”节点,只是“财产”的子节点。我如何直接在C#中执行此操作? “直接”是指没有选择Item的所有子节点,然后逐个检查。到目前为止:

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

回答

5

你可以用它代替ChildNodes财产SelectNodes(xpath)方法:

​​

Demo.

+0

谢谢!这就是我正在寻找的 – accand

+0

等一下,这一次选择所有的“属性”节点,我试图选择当前“Item”节点的子节点。 – accand

+0

@ user2567853糟糕,那是因为我把'//'放在'property'前面。删除双斜杠应该解决这个问题。 – dasblinkenlight

2

尝试使用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(); 
} 
+0

谢谢你的回答,似乎很不错,但在这一刻我是一个真正的新手和我对提出的其他解决方案更加熟悉。但我会继续为其他作品... – accand