read node net leer example c# xml xpath

c# - node - xpath vb net



XPath SelectNodes en.NET (4)

<Document> <A> <B> <C></C> </B> </A> <E> <F> <C></C> </F> <G> <C></C> </G> </E> </Document>

Si cargo el XML anterior en un XmlDocument y hago un SelectSingleNode en A usando la consulta XPath // C

XmlNode oNode = oDocument.SelectSingleNode("E"); XmlNodeList oNodeList = oNode.SelectNodes("//C");

¿Por qué devuelve nodos de Under B cuando lo que esperaría que ocurra sería que solo devuelva nodos de E

¿Tener sentido?

Editar: ¿Cómo haré que solo regrese desde ese nodo en adelante?


En la Especificación XPATH encontrará en 2.5 la siguiente declaración:

// para selecciona todos los para descendientes de la raíz del documento y, por lo tanto, selecciona todos los elementos para en el mismo documento que el nodo de contexto

es decir, el comportamiento que observas es válido. Deberías hacer algo como "/ E // C"


Especificar .//C logrará lo que desea, de lo contrario, la XPath se inicia desde la raíz del documento en lugar del nodo actual.

La confusión está en la definición de // del estándar XPath de la siguiente manera:

// es la abreviatura de / descenddant-or-self :: node () /. Por ejemplo, // para es short para / descenddant-o-self :: node () / child :: para y por lo tanto seleccionará cualquier elemento para en el documento (incluso un elemento para que sea un elemento de documento será seleccionado por / / para dado que el nodo del elemento del documento es un elemento secundario del nodo raíz); div // para es la abreviatura de div / descenddant-o-self :: node () / child :: para y por lo tanto seleccionará todos los para descendientes de div children.

Porque // es la abreviatura de /descendant-or-self::node()/ comienza en el nivel del documento a menos que especifique un nodo al inicio.


Simplemente: un // líder significa "en cualquier nivel" en el mismo documento que el nodo seleccionado.

De la especificación :

  • // para selecciona todos los para descendientes de la raíz del documento y, por lo tanto, selecciona todos los elementos para en el mismo documento que el nodo de contexto
  • .//para selecciona los descendientes del elemento para del nodo contextual

//C es todos los nodos C en todo el documento

/E//C serían solo C nodos bajo E

/C sería solo el nodo raíz C

Ver la referencia de sintaxis xpath