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
following
eje no contiene descendientes. - El eje
preceding
no 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