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()
}
鉴于此 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()
}