¿Cómo puedo navegar más profundamente en XML y añadir datos en ella
-
23-08-2019 - |
Pregunta
He cargado XmlDocument en la memoria y creado nuevas XmlElement. Ahora estoy tratando de añadir XmlElement a la ruta / informe / sección / hosts, pero no sé cómo. Puedo añadir fácilmente por debajo del nodo raíz XML pero no puedo averiguar cómo puedo navegar nivel más profundo en XML y simplemente añadir allí. En seudo que estoy tratando de hacer esto:
doc.SelectNodes ( "/ report / sección / hosts") AppendChild (subroot);.
El código:
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");
Solución
Trate SelectSingleNode en lugar de SelectNodes
XmlElement parent = (XmlElement)doc.SelectSingleNode("/report/section/hosts")
parent.AppendChild(subRoot);
Otros consejos
Usted está casi allí. Trate de usar SelectSingleNode lugar:
XmlNode node = doc.SelectSingleNode("/report/section/hosts");
node.AppendChild(subRoot);
El método SelectNodes devuelve una lista de nodos. Debe utilizar SelectSingleNode lugar ...
por ejemplo. (Parte superior de la cabeza, no prueba en Visual Studio)
doc.SelectSingleNode("/report/section/hosts").AppendChild(subRoot);
Usted necesita obtener una referencia a un XmlElement en su documento (que no sea la raíz) para anexar. Hay una serie de métodos disponibles en XmlDocument tales como GetElementById
y SelectSingleNode
el que lo haga por usted de diferentes maneras, la investigación al gusto.
Dicho esto, todo el API en esta zona es generalmente considerado como un poco doloroso, ¿tiene LINQ disponibles?