pregunta XmlDocument.SelectNodes
-
09-10-2019 - |
Pregunta
¿Cuál es la diferencia usando el nodo raíz para seleccionar y utilizar objetos de documento para seleccionar los nodos? se prefiere en qué dirección.
Por ejemplo,
1.
XmlDocument Doc = new XmlDocument();
Doc.Load(mem);
XmlNodeList nodeList = Doc.SelectNodes(@"//@id");
2.
XmlDocument Doc = new XmlDocument();
Doc.Load(mem);
XmlElement root = Doc.DocumentElement;
XmlNodeList nodeList = root.SelectNodes(@"//@id");
Solución
De hecho, nunca consiguió ninguna diferencia. Y usar simplemente
Doc.SelectNodes(@"//@id");
porque si existe la raíz del documento
bool b = Doc.OuterXml == Doc.DocumentElement.OuterXml; // true
Otros consejos
XPath 's expresión //
siempre coincide desde la raíz del documento, el resultado será será el mismo si se parte de la raíz del documento o de su documentElement
.
Así que supongo que es mejor usar la sintaxis Doc.SelectNodes("//@id");
más corto.
La raíz de un documento XML contiene su elemento documento, al menos, pero también puede contener instrucciones de procesamiento y comentarios. Por ejemplo, en este documento XML:
<!-- This is a child of the root -->
<document_element>
<!-- This is a child of the document element -->
<document_element>
<!-- This is also a child of the root -->
la raíz tiene tres nodos secundarios, uno de los cuales es su elemento de nivel superior. En este caso, la siguiente:
XmlNodeList comments = doc.SelectNodes("comment()");
y esto:
XmlNodeList comments = doc.DocumentElement.SelectNodes("comment()");
Vuelta resultados totalmente diferentes.