鉴于此xml doc
<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文档,我想为每个“Item”节点选择“property”子节点。我怎么能直接在c#中做到这一点?使用“直接”,我的意思是不选择Item的所有子节点,然后逐个检查。到目前为止:
XmlNodeList nodes = xmldoc.GetElementsByTagName("Item");
foreach(XmlNode node in nodes)
{
doSomething()
foreach(XmlNode child in node.ChildNodes)
{
if(child.Name == "property")
{
doSomethingElse()
}
}
}
答案 0 :(得分:20)
您可以使用SelectNodes(xpath)
方法代替ChildNodes
属性:
foreach(XmlNode child in node.SelectNodes("property"))
{
doSomethingElse()
}
答案 1 :(得分:3)
尝试使用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();
}