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");
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top