この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ドキュメントが与えられたら、「アイテム」ノードごとに、「プロパティ」子ノードのみを選択したいと思います。 C#で直接行うにはどうすればよいですか? 「直接」では、Itemのすべての子ノードを選択せずに、1つずつ確認します。これまでのところ:
XmlNodeList nodes = xmldoc.GetElementsByTagName("Item");
foreach(XmlNode node in nodes)
{
doSomething()
foreach(XmlNode child in node.ChildNodes)
{
if(child.Name == "property")
{
doSomethingElse()
}
}
}
ChildNodes
プロパティの代わりに SelectNodes(xpath)
メソッドを使用できます。
foreach(XmlNode child in node.SelectNodes("property"))
{
doSomethingElse()
}
XML DOMの代わりにLINQ to XMLを使用してみてください。これは、目的に合わせてはるかに単純な構文です。
XDocument doc = XDocument.Load(filename);
foreach (var itemElement in doc.Element("listOfItems").Elements("Item"))
{
var properties = itemElement.Elements("property").ToList();
}