2009-09-25 12 views
6

Si llamo SelectNodes en una XmlElement, y paso consulta XPath como este:SelectNodes no como alcance el Elemento

nodos XmlNodeList = xmlElement.SelectNodes ("// OtherNode");

La lista de nodos será para todos los elementos OtherNode del documento y no solo para los de xmlElement.

Me parece recordar que esto es por diseño, y por una buena razón, pero no recuerdo cuál fue el buen motivo ni cómo evitarlo.

Respuesta

10

Solo agregue un dot al comienzo del xpath. El dot selecciona el nodo actual:

XmlNodeList nodes = xmlElement.SelectNodes(".//OtherNode"); 
+1

Una simple explicación de "por qué" es que es como con las rutas de archivo - '/ foo/bar' sean es una ruta absoluta, donde el líder de'/'significa "empezar desde la raíz "; 'foo/bar' es una ruta de archivo relativa, que también se puede escribir'./foo/bar'. De forma similar con XPath, y allí se aplica tanto a '/' como a '//', por lo que llevar '/' siempre significa '' iniciar desde el nodo raíz en el árbol al que pertenece el nodo de contexto actual ''. –

+2

¿Por qué no simplemente "OtherNode"? – Joren

+3

¿Porque quiere considerar a todos los descendientes, y no solo a los hijos inmediatos? –

Cuestiones relacionadas