Étant donné ce document 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>
Compte tenu de ce document xml, je voudrais sélectionner, pour chaque nœud "Item", juste les nœuds enfants "property". Comment puis-je le faire directement en c #? Par "directement", je veux dire sans sélectionner tous les nœuds enfants de Item, puis vérifier un par un. Jusque là:
XmlNodeList nodes = xmldoc.GetElementsByTagName("Item");
foreach(XmlNode node in nodes)
{
doSomething()
foreach(XmlNode child in node.ChildNodes)
{
if(child.Name == "property")
{
doSomethingElse()
}
}
}
Vous pouvez utiliser la méthode SelectNodes(xpath)
au lieu de la propriété ChildNodes
:
foreach(XmlNode child in node.SelectNodes("property"))
{
doSomethingElse()
}
Essayez d'utiliser LINQ to XML au lieu de XML DOM car c'est une syntaxe beaucoup plus simple pour ce que vous voulez faire.
XDocument doc = XDocument.Load(filename);
foreach (var itemElement in doc.Element("listOfItems").Elements("Item"))
{
var properties = itemElement.Elements("property").ToList();
}