Con la expansión de XML como lenguaje de marcado para el in­te­r­ca­m­bio de datos mu­l­ti­pla­ta­fo­r­ma, aumentó la necesidad de contar con un estándar que pe­r­mi­tie­se realizar consultas complejas en do­cu­me­n­tos XML a apli­ca­cio­nes no basadas en XML.

Nota

El lenguaje de marcado ex­te­n­si­ble (XML, por sus siglas en inglés) es un lenguaje utilizado para la re­pre­se­n­ta­ción de datos es­tru­c­tu­ra­dos de forma je­rá­r­qui­ca en formato de texto. El lenguaje XML es legible tanto para humanos como para or­de­na­do­res y se emplea, entre otros, para in­te­r­ca­m­biar datos entre dos sistemas in­fo­r­má­ti­cos en Internet.

Con XQuery y XSLT, el W3C de­sa­rro­lló los es­tá­n­da­res ne­ce­sa­rios para el acceso por software a do­cu­me­n­tos XML. Estos ponen a di­s­po­si­ción in­te­r­fa­ces de pro­gra­ma­ción para que las apli­ca­cio­nes accedan a los do­cu­me­n­tos XML y los tra­n­s­fo­r­men o consulten contenido. La condición necesaria en estos casos es un estándar que permita la lo­ca­li­za­ción de elementos en los do­cu­me­n­tos XML, esto es, un lenguaje de de­s­cri­p­ción de ruta: Xpath.

A co­n­ti­nua­ción, ex­pli­ca­mos el modelo de datos Xpath (XDM) y pre­se­n­ta­mos la sintaxis en la que se basan las ex­pre­sio­nes Xpath para la lo­ca­li­za­ción de elementos XML.

Dominios web
Compra y registra tu dominio ideal
  • Gratis SSL Wildcard para tra­n­s­fe­re­n­cias de datos más seguras
  • Gratis registro privado para más pri­va­ci­dad

¿Qué es Xpath?

XML Path Language (Xpath) es un lenguaje de de­s­cri­p­ción de rutas para do­cu­me­n­tos XML de­sa­rro­lla­do por el W3C. Este lenguaje pone a di­s­po­si­ción de los usuarios una sintaxis no basada en XML que permite encontrar elementos concretos en un documento XML.

Por lo general, Xpath viene integrado en un lenguaje host que permite el pro­ce­sa­mie­n­to de los elementos XML. XQuery, por ejemplo, sirve para extraer in­fo­r­ma­ción de elementos XML lo­ca­li­za­dos con Xpath. XSLT, por su parte, se sirve del lenguaje de consulta en la tra­n­s­fo­r­ma­ción de do­cu­me­n­tos XML.

  • Xpath: na­ve­ga­ción en do­cu­me­n­tos XML
  • XQuery: consultas a do­cu­me­n­tos XML
  • XSLT: tra­n­s­fo­r­ma­ción de datos XML

La versión actual Xpath 3.1 está es­pe­ci­fi­ca­da en la re­co­me­n­da­ción de W3C del 21 de marzo de 2017.

Nota

A pesar de las ac­tua­li­za­cio­nes, numerosos pro­ce­sa­do­res XSLT, bu­s­ca­do­res web y apli­ca­cio­nes soportan úni­ca­me­n­te el estándar Xpath 1.0 del año 1999.

¿Cómo funciona Xpath?

Xpath se basa en un modelo de datos que in­te­r­pre­ta el documento XML como una secuencia de elementos ordenados en una es­tru­c­tu­ra de árbol. Esta es­tru­c­tu­ra del modelo de datos Xpath es co­m­pa­ra­ble a la del Modelo de Objetos del Documento (DOM), que opera como interfaz entre HTML y Ja­va­S­cri­pt en el buscador web.

La lo­ca­li­za­ción de elementos XML se realiza basándose en el sistema de registro Unix, en forma de ex­pre­sio­nes de ruta. Los elementos básicos de estas rutas de lo­ca­li­za­ción son los nodos, los ejes, las pruebas de nodos y los pre­di­ca­dos.

Tipos de nodos

Cada uno de los elementos de una es­tru­c­tu­ra XML se denomina nodo. La cla­si­fi­ca­ción de los nodos viene definida tanto por el orden de aparición en el documento como por el en­tre­la­za­do de los elementos XML.

El modelo de datos Xpath distingue siete tipos de nodos con di­fe­re­n­tes funciones:

  • Nodo de elemento (element node)
  • Nodo de documento (root node) (a partir de Xpath 2.0; antes de­no­mi­na­do “nodo raíz”)
  • Nodo atributo (attribute node)
  • Nodo de texto (text node)
  • Nodo de espacio de nombres (namespace node)
  • Nodo de in­s­tru­c­ción de pro­ce­sa­mie­n­to (pro­ce­s­si­ng in­s­tru­c­tion node)
  • Nodo de co­me­n­ta­rio (comment node)

Veamos los tipos de nodos del modelo de datos Xpath mediante un ejemplo. El siguiente documento XML sirve al in­te­r­ca­m­bio de datos en el pedido de un libro y contiene los siete tipos de nodos.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Order SYSTEM "order.dtd">
<?xml-stylesheet type="text/css" href="style.css"?>
<!--That is a comment!-->
<order date="2019-02-01">
    <address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/billing">
        <shipping:name>Ellen Adams</shipping:name>
        <shipping:street>123 Maple Street</shipping:street>
        <shipping:city>Mill Valley</shipping:city>
        <shipping:state>CA</shipping:state>
        <shipping:zip>10999</shipping:zip>
        <shipping:country>USA</shipping:country>
        <billing:name>Mary Adams</billing:name>
        <billing:street>8 Oak Avenue</billing:street>
        <billing:city>Old Town</billing:city>
        <billing:state>PA</billing:state>
        <billing:zip>95819</billing:zip>
        <billing:country>USA</billing:country>
    </address>
    <comment>Please use gift wrapping!</comment>
    <items>
        <book isbn="9781408845660">
            <title>Harry Potter and the Prisoner of Azkaban</title>
            <quantity>1</quantity>
            <priceus>22.94</priceus>
            <comment>Please confirm delivery date until Christmas.</comment>
        </book>
        <book isbn="9780544003415">
            <title>The Lord of the Rings</title>
            <quantity>1</quantity>
            <priceus>17.74</priceus>
        </book>
    </items>
</order>

Nodo de elemento (element node)

En el árbol de Xpath, cada uno de los elementos que conforman el documento XML co­n­s­ti­tu­ye un nodo de elemento, con excepción de la de­cla­ra­ción XML y la de­fi­ni­ción del tipo de documento, lo­ca­li­za­das al principio del mismo.

De­cla­ra­ción XML:

<?xml version="1.0"? encoding="utf-8"?>

De­fi­ni­ción del tipo de documento (DTD):

<!DOCTYPE Order SYSTEM "order.dtd">

Los nodos de elemento comienzan con una etiqueta de inicio y terminan con una etiqueta de cierre y, por lo general, se en­cue­n­tran en­tre­la­za­dos.

El primer elemento del documento se denomina elemento raíz.

En el ejemplo anterior, el elemento raíz lo co­n­s­ti­tu­ye el nodo order, que actúa de elemento padre del su­b­co­n­ju­n­to de nodos address, comment y items, los cuales, a su vez, también contienen elementos hijo.

Nodo de documento (document node)

El documento es la raíz de la es­tru­c­tu­ra de árbol. En el documento XML, este nodo no se ma­ni­fie­s­ta de forma visible ni está re­pre­se­n­ta­do por texto; se trata, más bien, de un nodo co­n­ce­p­tual que encierra todos los elementos del documento. Los elementos hijo del nodo de documento son tanto el elemento raíz como, dado el caso, el nodo de in­s­tru­c­ción de pro­ce­sa­mie­n­to y el nodo de co­me­n­ta­rio.

Nodo atributo (attribute node)

El atributo de un elemento XML se re­pre­se­n­ta en el modelo de datos Xpath como un nodo atributo. Cada uno de estos nodos consta de un ide­n­ti­fi­ca­dor y de un valor su­bo­r­di­na­do.

En el código de ejemplo, el primer elemento book contiene el atributo isbn con el valor 9781408845660.

<book isbn="9781408845660">

El nodo atributo pertenece al nodo de elemento; no obstante, no se le considera un hijo.

Nodo de texto (text node)

Los ca­ra­c­te­res en­ca­p­su­la­dos entre las etiquetas de un nodo de elemento se denominan nodo de texto.

En el ejemplo, el nodo de elemento title contiene el nodo de texto Harry Potter and the Prisoner of Azkaban.

Harry Potter and the Prisoner of Azkaban

Nodo de espacio de nombres

Los nombres de elementos y atributos de un documento XML co­rre­c­ta­me­n­te co­n­s­ti­tui­do tienen asignado un espacio de nombre. Por lo general, esta asi­g­na­ción viene es­ta­ble­ci­da por el DTD al principio del documento.

Si en un documento XML se emplean elementos o atributos con espacios de nombre di­fe­re­n­tes, el espacio de nombre en cuestión se definirá ex­plí­ci­ta­me­n­te con ayuda del atributo xmlns o del prefijo xmlns en la etiqueta de inicio del elemento referido. El valor del atributo xmlns debe ser un Ide­n­ti­fi­ca­dor Uniforme de recurso (URI) que indica a qué espacio de nombre se asigna un elemento. La asi­g­na­ción de un espacio de nombre a un prefijo xmlns puede rea­li­zar­se tanto con el elemento como con todos los hijos. En la es­tru­c­tu­ra de árbol, cada uno de los espacios de nombre se co­rre­s­po­n­de con un nodo de espacio de nombre.

En el código de ejemplo, se han definido para el elemento XML address dos espacios de nombre distintos: xmlns:shipping y xmlns:billing. Los hijos del elemento address cuentan con el prefijo co­rre­s­po­n­die­n­te para su cla­si­fi­ca­ción.

<address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/ billing">
                <shipping:name>Ellen Adams</shipping:name>
                <shipping:street>123 Maple Street</shipping:street>
                <shipping:city>Mill Valley</shipping:city>
                <shipping:state>CA</shipping:state>
                <shipping:zip>10999</shipping:zip>
                <shipping:country>USA</shipping:country>
                <billing:name>Mary Adams</billing:name>
                <billing:street>8 Oak Avenue</billing:street>
                <billing:city>Old Town</billing:city>
                <billing:state>PA</billing:state>
                <billing:zip>95819</billing:zip>
                <billing:country>USA</billing:country>
        </address>

En de­fi­ni­ti­va, el prefijo xmlns permite di­fe­re­n­ciar cla­ra­me­n­te elementos de distintos espacios de nombre, por lo que, en el ejemplo, el elemento street con el prefijo shipping contiene la in­fo­r­ma­ción sobre la dirección de envío, mientras que el elemento street con el prefijo billing hace re­fe­re­n­cia a la dirección de fa­c­tu­ra­ción.

Nodo de in­s­tru­c­ción de pro­ce­sa­mie­n­to (pro­ce­s­si­ng in­s­tru­c­tion node)

Las in­s­tru­c­cio­nes de pro­ce­sa­mie­n­to de los do­cu­me­n­tos XML se en­cue­n­tran fuera del árbol del documento y se denominan nodos de in­s­tru­c­ción de pro­ce­sa­mie­n­to. El nodo de in­s­tru­c­ción de pro­ce­sa­mie­n­to comienza por <? y termina con ?>.

En el ejemplo de arriba, en­co­n­tra­mos la siguiente in­s­tru­c­ción de pro­ce­sa­mie­n­to:

<?xml-stylesheet type="text/css" href="style.css"?>

La co­n­s­tru­c­ción si­n­tá­c­ti­ca de la de­cla­ra­ción XML al principio del archivo es similar a la de una in­s­tru­c­ción de pro­ce­sa­mie­n­to, aunque no se considera un nodo de in­s­tru­c­ción de pro­ce­sa­mie­n­to en el sentido del modelo de datos Xpath.

Nodo de co­me­n­ta­rio (comment node)

En un documento XML, Xpath procesa el contenido marcado como co­me­n­ta­rio como un nodo de co­me­n­ta­rio. Este nodo engloba úni­ca­me­n­te los ca­ra­c­te­res de­s­ta­ca­dos y no el marcado (Markup).

En el ejemplo anterior, en­co­n­tra­mos el siguiente nodo de co­me­n­ta­rio:

That is a comment!

Rutas de lo­ca­li­za­ción

La búsqueda de nodos se realiza con ayuda de las de­no­mi­na­das rutas de lo­ca­li­za­ción. Una ruta de lo­ca­li­za­ción es una expresión Xpath empleada para navegar a través del árbol y se­le­c­cio­nar el conjunto deseado de nodos.

Las rutas de lo­ca­li­za­ción se analizan de izquierda a derecha y pueden ser absolutas o relativas. Una ruta absoluta comienza en el nodo de documento y viene es­pe­ci­fi­ca­da por la barra diagonal (/). Por el contrario, las rutas de lo­ca­li­za­ción relativas pueden comenzar en cualquier otro nodo dentro de la es­tru­c­tu­ra de árbol, en cuyo caso, el punto de partida recibe el nombre de nodo de contexto.

La expresión de ruta consta de pasos separados por barras dia­go­na­les (/), de forma similar al di­re­c­cio­na­mie­n­to de ficheros en un sistema de registro.

Cada uno de los pasos de una expresión de ruta consta de hasta tres partes: eje, prueba de nodo y un número cua­l­quie­ra de pre­di­ca­dos.

  • Eje: el eje determina la dirección de la na­ve­ga­ción en la es­tru­c­tu­ra de árbol a partir de los nodos de contexto o los nodos de documento.
  • Prueba de nodo: la prueba de nodo es un filtro con el que se delimita a un conjunto de nodos entre todos los que se sitúan en el eje.
  • Pre­di­ca­dos: los pre­di­ca­dos brindan la opo­r­tu­ni­dad de filtrar de nuevo los nodos se­le­c­cio­na­dos por los pasos de eje y la prueba de nodo.

Los pasos de lo­ca­li­za­ción de una expresión Xpath se definen conforme a la siguiente sintaxis:

Eje::prueba de nodo[predicado1][predicado2]…
Notación Función
/ Actúa como separador de los pasos de una ruta
:: Actúa como separador entre el eje y la prueba de nodo

Ejes

La sintaxis Xpath permite navegar por medio de los si­guie­n­tes ejes.

Eje De­no­mi­na­ción en español Nodos se­le­c­cio­na­dos
child hijo Todos los nodos hijo di­re­c­ta­me­n­te su­bo­r­di­na­dos
parent nodo padre Los nodos padre in­me­dia­ta­me­n­te por encima
de­s­ce­n­da­nt de­s­ce­n­die­n­te Todos los nodos de­s­ce­n­die­n­tes del nodo de contexto
ancestor* ancestro Todos los nodos por encima del nodo de contexto
following nodos si­guie­n­tes Todos los nodos que aparecen después del nodo de documento, con excepción de los nodos de­s­ce­n­die­n­tes
preceding* nodos an­te­rio­res Todos los nodos que se en­cue­n­tran antes del nodo de contexto, con excepción de los ancestros
following-sibling hermanos menores Son todos los nodos del documento XML que proceden de un mismo nodo padre
preceding-sibling* hermanos mayores Son todos los nodos pre­ce­de­n­tes del documento XML que proceden de un mismo nodo padre
attribute atributo Todos los nodos atributo de un nodo de elemento
namespace espacio de nombre Todos los nodos de espacio de nombre de un nodo de elemento; este eje no se encuentra en las es­pe­ci­fi­ca­cio­nes a partir de la versión 2.0.
self nodo en curso El nodo de contexto en curso
de­s­ce­n­da­nt-or-self de­s­ce­n­die­n­tes y el nodo en curso Todos los nodos de­s­ce­n­die­n­tes del nodo de contexto y el nodo de contexto
ancestor-or-self* El nodo de contexto y sus ancestros Todos los nodos an­te­ce­so­res al nodo de contexto y el nodo de contexto
Nota

Los ejes marcados con asterisco (*) son apli­ca­cio­nes re­gre­si­vas que, de co­n­fo­r­mi­dad con la versión 1.0 de la es­pe­ci­fi­ca­ción Xpath, co­n­s­ti­tu­yen un elemento opcional que no deben soportar obli­ga­to­ria­me­n­te las apli­ca­cio­nes es­tá­n­da­res.

El siguiente gráfico muestra una re­pre­se­n­ta­ción es­que­má­ti­ca de los ejes más im­po­r­ta­n­tes en el modelo de datos Xpath, partiendo del nodo de contexto (en rojo).

El eje child::, por ejemplo, devuelve todos los elementos hijo del nodo de contexto D: el conjunto de nodos comprende los nodos E, H e I.

Prueba de nodo

Con la prueba de nodo, se filtra el conjunto de nodos se­le­c­cio­na­dos por el eje. Conforme a la es­pe­ci­fi­ca­ción Xpath, existen dos criterios posibles.

  • Nombre de nodo: filtrar los nodos en el eje que tengan un de­te­r­mi­na­do nombre.
  • Tipo de nodo: se­le­c­cio­nar todos los nodos en un eje que compartan el mismo tipo.

Nombre de nodo como criterio de filtro

En el código de ejemplo anterior, podrían se­le­c­cio­nar­se, con la siguiente expresión de ruta, todos los de­s­ce­n­die­n­tes del nodo de documento que cuenten con el nombre book.

/descendant::book

No obstante, si entre todos los nodos de elemento con el nombre book, deseas filtrar úni­ca­me­n­te aquellos con el atributo isbn, necesitas una expresión de ruta con dos pasos.

/descendant::book/attribute::isbn

Tipo de nodo como criterio de filtro

Si deseas definir un tipo de nodo como criterio de filtro para se­le­c­cio­nar un conjunto de nodos, emplea las si­guie­n­tes funciones:

Función Nodos se­le­c­cio­na­dos
node() La función node() devuelve todos los nodos del eje se­le­c­cio­na­do.
text() La función text() devuelve todos los nodos de texto del eje se­le­c­cio­na­do.
comment() La función comment() devuelve todos los nodos de co­me­n­ta­rio del eje se­le­c­cio­na­do.
pro­ce­s­si­ng-in­s­tru­c­tion() La función pro­ce­s­si­ng-in­s­tru­c­tion() devuelve todos los nodos de in­s­tru­c­ción de pro­ce­sa­mie­n­to del eje se­le­c­cio­na­do.
Nota

Xpath 1.0 define 25 funciones y, a partir de Xpath 2.0, se dispone de 111 funciones para la de­s­cri­p­ción de rutas de lo­ca­li­za­ción. En­co­n­tra­rás un compendio en la re­co­me­n­da­ción W3C Xpath and XQuery Functions and Operators 3.1 del 21 de marzo de 2017.

Prueba de nodo con carácter comodín

Si, en lugar de las pruebas de nodo, empleas el es­pa­cia­dor * (asterisco), se devuelven todos los nodos que co­rre­s­po­n­dan al tipo de nodo principal del eje se­le­c­cio­na­do. Esto es, si un eje contiene un nodo de elemento, este será el tipo de nodo principal del eje. Esto se aplica a todos los ejes, con excepción de los atributos y los espacios de nombre, puesto que el tipo de nodo principal en estos casos sería el nodo atributo y el nodo de espacio de nombre, re­s­pe­c­ti­va­me­n­te.

La siguiente expresión de ruta, por ejemplo, devuelve todos los atributos del nodo de contexto en curso:

attribute::*

Notación abreviada

Para los ejes empleados con fre­cue­n­cia y los pasos de lo­ca­li­za­ción, se han definido abre­via­tu­ras que pueden ser uti­li­za­das en lugar de la expresión de ruta completa en inglés.

Notación estándar Abre­via­tu­ra Ejemplo
child:: vacío child es el eje estándar y su de­s­cri­p­ción se puede suprimir. Por tanto, la expresión de ruta child::book/child::title quedaría abreviada en book/title.
attribute:: @ El eje attribute, incluidos los puntos, se puede abreviar con el símbolo @.
La expresión de ruta book/attribute::isbn devuelve el nodo atributo isbn del elemento book y se re­pre­se­n­ta con notación abreviada como: book/@isbn.
/de­s­ce­n­da­nt-or-self::node()/ // El paso de lo­ca­li­za­ción /de­s­ce­n­da­nt-or-self::node()/ devuelve el nodo de documento y todos los de­s­ce­n­die­n­tes; su forma abreviada es //. En lugar de /de­s­ce­n­da­nt-or-self::node()/child::item, escribe //item y la ruta de lo­ca­li­za­ción devuelve todos los nodos item del documento.
parent::node() .. El paso parent::node() devuelve el nodo padre del nodo de contexto y se abrevia con .. .
self::node() . El paso self::node() devuelve el nodo de contexto en curso y se abrevia con . .

Pre­di­ca­dos

Los pre­di­ca­dos permiten afinar la búsqueda de nodos realizada mediante el eje y la prueba de nodo.

Co­n­s­ti­tu­yen la tercera parte de un paso de lo­ca­li­za­ción, son op­cio­na­les y se incluyen uti­li­za­n­do corchetes. Los criterios de filtro entre corchetes se formulan como ex­pre­sio­nes que contienen, entre otros, ex­pre­sio­nes de ruta, funciones, ope­ra­do­res y cadenas.

Xpath soporta tanto pre­di­ca­dos generales como numéricos.

Pre­di­ca­dos generales

Los pre­di­ca­dos generales filtran el conjunto de nodos se­le­c­cio­na­dos a través del eje y de la prueba de nodo, asignando un valor booleano (verdadero o falso) a cada nodo, de modo que solo los nodos que cumplen con la condición y tienen un valor verdadero se incluyen en el resultado.

La fo­r­mu­la­ción de ex­pre­sio­nes para pre­di­ca­dos generales se realiza por medio de ope­ra­do­res. Estos se utilizan para se­le­c­cio­nar nodos con contenido o ca­ra­c­te­rí­s­ti­cas es­pe­cí­fi­cas, como, por ejemplo, todos los nodos con unos de­te­r­mi­na­dos ca­ra­c­te­res, un atributo o un elemento hijo pree­s­ta­ble­ci­do (a poder ser, en una de­te­r­mi­na­da posición).

En las tablas si­guie­n­tes, puede verse un resumen de los ope­ra­do­res di­s­po­ni­bles, los cuales se cla­si­fi­can en ope­ra­do­res ari­t­mé­ti­cos, lógicos y de co­m­pa­ra­ción.

Ope­ra­do­res ari­t­mé­ti­cos Función
+ suma
- resta
* mu­l­ti­pli­ca­ción
div resultado entero de la división
mod módulo
Ope­ra­do­res de co­m­pa­ra­ción Función
= igual
!= no igual
< menor que; en XSLT, se necesita el operador &lt;
> mayor que; en XSLT, se re­co­mie­n­da usar el operador &gt;
<= menor que o igual; en XSLT, se necesita el operador &lt;
>= Mayor que o igual; en XSLT, se re­co­mie­n­da usar el operador &gt;
Ope­ra­do­res lógicos Función
and Operador Y lógico
or Operador O lógico

En el siguiente ejemplo, el predicado [title="Harry Potter and the Prisoner of Azkaban"] limita los re­su­l­ta­dos a un nodo de elemento llamado book, cuyo elemento hijo title contiene la cadena de ca­ra­c­te­res Harry Potter and the Prisoner of Azkaban.

Nota

El ejemplo emplea la sintaxis de Xpath 3, que, dado el caso, podría no ser soportada por todas las he­rra­mie­n­tas online. Los ejemplos de consulta que pre­se­n­ta­mos aquí se ven fá­ci­l­me­n­te con el siguiente tester online: http://videlibri.sou­r­ce­fo­r­ge.net/cgi-bin/xidelcgi.

/order/items/book[title="Harry Potter and the Prisoner of Azkaban"]

Aquí, hemos se­le­c­cio­na­do el nodo de elemento book, que contiene los datos para el libro de Harry Potter.

<book isbn="9781408845660">
        <title>Harry Potter and the Prisoner of Azkaban</title>
        <quantity>1</quantity>
        <priceus>22.94</priceus>
        <comment>Please confirm delivery date until Christmas.</comment>
    </book>

Otro elemento hijo de este nodo de elemento es comment. La expresión de ruta solo tendría que pro­lo­n­gar­se con dos pasos más si queremos se­le­c­cio­nar su contenido.

/order/items/book[title="Harry Potter and the Prisoner of Azkaban"]/comment/text()

Con el paso comment (abre­via­ción de child::comment) navegamos hasta el hijo del elemento book del mismo nombre y se­le­c­cio­na­mos su nodo de texto con la función text(). Esto co­rre­s­po­n­de a la siguiente cadena de ca­ra­c­te­res:

Please confirm delivery date until Christmas.

Cuando se emplea una única expresión de ruta en un predicado, se habla de una prueba de exi­s­te­n­cia. Con la expresión de ruta que se muestra a co­n­ti­nua­ción, se comprobó si el documento XML de arriba contiene uno o más nodos con el nombre de comment.

Notación abreviada:

//book[comment]

Notación estándar:

/descendant-or-self::node()/child::book[child::comment]

La ruta //book[comment] devuelve todos los nodos con el nombre book que tienen un elemento hijo llamado comment.

Pre­di­ca­dos numéricos

Los pre­di­ca­dos numéricos permiten localizar nodos indicando su posición. La expresión de ruta a co­n­ti­nua­ción devuelve el segundo nodo en base a su posición en el documento; el nombre del nodo es book.

//book[2]

En sentido estricto, el predicado [2] es una abre­via­ción de [position()=2]. Con ello, Xpath se­le­c­cio­na en primer lugar todos los nodos con el nombre book y filtra se­gui­da­me­n­te los nodos en los que la función position()=2  tiene valor booleano verdadero.

Nota

Al contrario que con otros lenguajes de pro­gra­ma­ción, las enu­me­ra­cio­nes en Xpath comienzan con 1.

In­fo­r­ma­ción adicional sobre XML Path Language

En el sitio web de W3C, en­co­n­tra­rás una vista general de los niveles de de­sa­rro­llo en los que se encuentra XML Path Language, así como de todos los es­tá­n­da­res y bo­rra­do­res.

De igual modo, en­co­n­tra­rás he­rra­mie­n­tas e in­fo­r­ma­ción gratuitas para la uti­li­za­ción de Xpath con apli­ca­cio­nes web en MDN Web Docs y en Microsoft Developer Network.

Ir al menú principal