Comment puis-je naviguer plus profond en XML et ajouter des données dans ce
-
23-08-2019 - |
Question
Je l'ai chargé XmlDocument en mémoire et créé de nouvelles XmlElement. Maintenant, je suis en train d'ajouter XmlElement au chemin / rapport / section / hosts mais je ne sais pas comment. Je peux ajouter facilement en dessous de nœud racine de XML, mais je ne peux pas comprendre comment puis-je naviguer plus profondément en XML et ajoutez juste là. En pseudo Je suis en train de faire ceci:
doc.SelectNodes ( "/ rapport / section / hosts") appendChild (Sous-répertoire).
Le code:
XmlDocument doc = new XmlDocument();
doc.Load("c:\\data.xml");
//host
XmlElement subRoot = doc.CreateElement("host");
//Name
XmlElement ElName = doc.CreateElement("name");
XmlText TxtName = doc.CreateTextNode("text text");
ElName.AppendChild(TxtName);
subRoot.AppendChild(ElName);
doc.DocumentElement.AppendChild(subRoot);
doc.Save("c:\\data.xml");
La solution
Essayez SelectSingleNode au lieu de SelectNodes
XmlElement parent = (XmlElement)doc.SelectSingleNode("/report/section/hosts")
parent.AppendChild(subRoot);
Autres conseils
Vous êtes presque. Essayez d'utiliser à la place SelectSingleNode:
XmlNode node = doc.SelectSingleNode("/report/section/hosts");
node.AppendChild(subRoot);
La méthode SelectNodes retourne une liste de nœuds. Vous devez utiliser à la place SelectSingleNode ...
par exemple. (En haut de ma tête, ne pas tester dans Visual Studio)
doc.SelectSingleNode("/report/section/hosts").AppendChild(subRoot);
Vous devez obtenir une référence à un XmlElement dans votre doc (autre que la racine) à ajouter à. Il y a un certain nombre de méthodes disponibles sur XmlDocument tels comme GetElementById
et SelectSingleNode
qui font cela pour vous de différentes manières, de la recherche au goût.
Cela dit, toute l'API dans ce domaine est généralement considéré comme un peu douloureux, avez-vous LINQ disponible?