xpath
Ubicación de caminos y ejes
Buscar..
Observaciones
Una ruta de ubicación de XPath es una serie de pasos de ubicación separados por un carácter / :
step1/step2/step3
Un paso de ubicación contiene un eje , una prueba de nodo y una lista opcional de predicados . El eje y la prueba de nodo están separados por dos caracteres de dos puntos :: . Los predicados están encerrados entre corchetes:
axis::nodeTest[predicate1][predicate2]
La evaluación de una ruta de ubicación comienza con un conjunto de nodos que contiene el nodo de contexto dado por el contexto de la expresión, o el nodo raíz , si la ruta de ubicación comienza con un / . En cada paso, cada nodo N en el conjunto de nodos original se reemplaza con el conjunto de nodos que
- Se puede llegar desde N siguiendo el eje dado,
- coincide con la prueba de nodo , y
- coincide con todos los predicados .
El resultado de una expresión de ruta de ubicación es el conjunto final de nodos obtenido después de procesar todos los pasos de ubicación .
Atravesando elementos infantiles
Recorrido desde el nodo raíz a un elemento descendiente utilizando el eje child :
/child::html/child::body/child::div/child::span
Dado que el eje child es el eje predeterminado, se puede abreviar como:
/html/body/div/span
Atravesando a todos los descendientes
Los ejes descendant y descendant-or-self pueden usarse para encontrar todos los elementos descendientes de un nodo a cualquier profundidad. En contraste, el eje child solo atraviesa niños inmediatos.
/child::html/descendant::span
/child::html/descendant-or-self::*
La barra doble // es un acceso directo para /descendant-or-self::node()/ . Entonces las siguientes expresiones son equivalentes:
table//td
child::table/descendant-or-self::node()/child::td
child::table/descendant::td
table/descendant::td
Travesía antepasados
El eje parent contiene solo el padre de un nodo. La siguiente expresión selecciona el elemento html tomando un desvío sobre el elemento del body :
/child::html/child::body/parent::html
.. es un acceso directo para parent::node()
Los ejes ancestor y ancestor-or-self atraviesan todos los antepasados de un nodo. La siguiente expresión devuelve todos los elementos div que son ancestros del nodo de contexto:
ancestor::div
El eje "yo"
El eje self solo contiene el nodo de contexto. La expresión . es un acceso directo para self::node() y siempre coincide con el nodo de contexto. El . El acceso directo es útil para enumerar descendientes del nodo de contexto. Las siguientes expresiones son equivalentes:
.//span
self::node()/descendant-or-self::node()/child::span
descendant::span
El eje self puede ser útil en los predicados de XPath 1.0. Por ejemplo, para seleccionar todos los hijos h1 , h2 y h3 del nodo de contexto:
*[self::h1 or self::h2 or self::h3]
Atravesando nodos siguientes y anteriores
Los following-sibling ejes following-sibling y following-sibling preceding-sibling contienen los hermanos antes o después del nodo de contexto, y los ejes following y preceding contienen todos los nodos en el documento antes o después del nodo de contexto, pero:
- Ninguno de estos ejes contiene atributos o nodos de espacio de nombres.
- El
followingeje no contiene descendientes. - El eje
precedingno contiene ningún ancestro.
Ejemplos:
following::span[1]
following-sibling::*[last()]
Atravesando nodos de atributo y espacio de nombres
Los ejes de attribute y namespace contienen todos los nodos de atributo y espacio de nombres de un elemento. El atajo @ representa attribute:: , por lo que los siguientes son equivalentes:
child::div/attribute::class
div/@class