<X version="1.0">
<Y id="abc" abv="a"/>
<Y id="edf" abv="e"/>
</X>
Je veux sélectionner le nœud dont l'id est "abc" et retourner son abv "a".
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNodeList list = doc.SelectNodes("X/Y");
var node = list.Cast<XmlNode>().Where(node => node["id"].InnerText == "abc")
.Select(x=>x["abv"].InnerText);
Mais cela ne fonctionne pas, noeud ["id"]. InnerText est toujours "". Pouvez-vous indiquer où se situe un problème?
Merci beaucoup
InnerText
pour un nœud est le texte qui apparaît entre <node>
et </node>
. Donc, par exemple <Y attributes />
il n'y a pas de texte interne.
Vous devez utiliser node => node.Attributes["id"].Value == "abc"
Mis à part le fait que votre extrait de code ne serait pas compilé en raison de la variable node
non unique (d'abord en dehors de la requête linq et deuxième dans la méthode "where" lambda), vous avez également manqué Attributes
dans votre requête.
Cela devrait être quelque chose comme
var node = list.Cast<XmlNode>()
.Where(n => n.Attributes["id"].InnerText == "abc")
.Select(x => x.Attributes["abv"].InnerText);
Il suffit de lancer XmlNodeList en liste, comme ça:
List<XmlNode> list = new List<XmlNode>();
foreach(XmlNode a in xmlNodeList)
{
list.Add(a);
}
list.OrderBy((element) => element.ChildNodes[0].InnerText);