0% encontró este documento útil (0 votos)
71 vistas33 páginas

XPATH

El documento describe el lenguaje XSL, que incluye tres lenguajes desarrollados por el W3C: XPath, XSLT y XSL-FO. XPath permite seleccionar nodos de un documento XML y calcular valores a partir de su contenido. Considera un documento XML como un árbol de siete tipos de nodos. Las expresiones XPath representan un recorrido en el árbol del documento y se evalúan para devolver los nodos que coinciden con la expresión.

Cargado por

deberes_13
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
0% encontró este documento útil (0 votos)
71 vistas33 páginas

XPATH

El documento describe el lenguaje XSL, que incluye tres lenguajes desarrollados por el W3C: XPath, XSLT y XSL-FO. XPath permite seleccionar nodos de un documento XML y calcular valores a partir de su contenido. Considera un documento XML como un árbol de siete tipos de nodos. Las expresiones XPath representan un recorrido en el árbol del documento y se evalúan para devolver los nodos que coinciden con la expresión.

Cargado por

deberes_13
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1/ 33

XSL: Lenguaje de Hojas de Estilo Extensible

Aunque las hojas de estilo CSS se pueden aplicar a los documentos XML, las hojas de estilo tienen muchas
limitaciones ya que se crearon para complementar al HTML, es decir, para ver pginas web en pantallas de
ordenador. De la misma manera que el XML es una generalizacin del HTML, el W3C cre una generalizacin
de las hojas de estilo CSS a la que se denomin XSL (eXtensible Stylesheet Languaje), es decir, Lenguaje de hojas
de estilo extensible.
El W3C ha desarrollado tres lenguajes:

XPath: un lenguaje para referirse a partes de un documento XML.

XSLT (XSL Transformation, es decir, Transformaciones XSL): un lenguaje para transformar documentos
XML.

XSL-FO (XSL Formatting Objects, es decir, Objetos de formato XSL): un lenguaje para especificar el formato
de un documento XML y posteriormente convertirlo a PDF o PostScript.

XPath: XML Path language


Qu es XPath
XPath es un lenguaje que permite seleccionar nodos de un documento XML y calcular valores a partir de su
contenido. Existen tres versiones de XPath aprobadas por el W3C, aunque la versin ms utilizada sigue siendo
la versin 1:

noviembre de 1999: XML Path Language 1.0

enero de 2007: XML Path Language 2.0

diciembre de 2010: XML Path Language 2.0 (2 edicin)

abril de 2014: XML Path Language 3.0

rbol del documento


XPath considera un documento XML como un rbol de nodos. En Informtica, un rbol es una estructura de
datos que equivale a un rbol matemtico. En Matemticas un rbol es un caso particular de grafo. Los
siguientes trminos definidos en teora de grafos se utilizan tambin en Informtica y en XPath:
Un grafo es un conjunto de objetos
llamados nodos o vrtices unidos por enlaces llamados arcos o aristas. Un grafo dirigido es un grafo en el
que los arcos tienen direccin.

Cuando dos nodos estn unidos por un arco con direccin, el nodo padre es el
nodo del que parte el arco y el nodo hijo es el nodo al que llega el arco.
Un rbol es un grafo en el que cualquier pareja de
vrtices estn conectada por un nico camino (es decir, que no hay ciclos). Un rbol dirigido es un rbol en
el que las aristas tienen direccin y todos los nodos menos uno tienen un nico padre.

El nodo raz de un rbol dirigido es el nico nodo sin padre.


Los nodos hermanos son los nodos que tienen el mismo padre.
Los nodos descendientes de un nodo son
todos los nodos a los que se llega desde el nodo: los hijos, los hijos de los hijos, etc. Los nodos
ascendientes de un nodo son todos los nodos de los que un nodo es descendiente: el padre, el padre del
padre, etc.

Tipos de nodos
Un documento XML puede representarse como un rbol dirigido, considerando por ejemplo los elementos como
nodos y que un elemento es padre de los elementos que contiene. Pero en XPath no slo los elementos son nodos,
en realidad hay siete tipos de nodos:

Raz

Elemento

Atributo
Texto

Comentario

Instruccin de procesamiento

Espacio de nombres

Nota: La declaracin DOCTYPE no se considera como nodo.


Por ejemplo, el documento XML siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
</biblioteca>
se puede representar mediante el siguiente grafo:
Los nodos atributos y de texto no son como los nodos elemento. Por ejemplo, los nodos atributo y de texto no
pueden tener descendientes. En realidad el nodo atributo ni siquiera se considera como hijo, sino como una
etiqueta adosada al elemento. El texto contenido por una etiqueta s que se considera hijo del elemento, aunque
las expresiones XPath suelen trabajar con nodos elemento y para referirse a los atributos o al texto se utilizan
notaciones especiales.

Sintaxis de la expresiones XPath


Una expresin XPath es una cadena de texto que representa un recorrido en el rbol del documento. Las
expresiones ms simples se parecen a las rutas de los archivos en el explorador de Windows o en la shell de
GNU/Linux.
Evaluar una expresin XPath es buscar si hay nodos en el documento que se ajustan al recorrido definido en la
expresin. El resultado de la evaluacin son todos los nodos que se ajustan a la expresin. Para poder evaluar
una expresin XPath, el documento debe estar bien formado.
Las expresiones XPath se pueden escribir de dos formas distintas:

sintaxis abreviada: ms compacta y fcil de leer, que se explica en esta leccin

sintaxis completa: ms larga pero con ms opciones disponibles

Las expresiones XPath se pueden dividir en pasos de bsqueda. Cada paso de bsqueda se puede a su vez
dividir en tres partes:

eje: selecciona nodos elemento o atributo basndose en sus nombres.


predicado: restringe la seleccin del eje a que los nodos cumplan ciertas condiciones.

seleccin de nodos: de los nodos seleccionados por el eje y predicado, selecciona los elementos, el texto que
contienen o ambos.

Sintaxis abreviada
Veamos unos ejemplos de expresiones XPath de sintaxis abreviada y el resultado de su evaluacin en el
documento de ejemplo anterior:
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
</biblioteca>

Eje (en ingls, axis)


El eje nos permite seleccionar un subconjunto de nodos del documento y corresponde a recorridos en el rbol del
documento. Los nodos elemento se indican mediante el nombre del elemento. Los nodos atributo se indican
mediante @ y el nombre del atributo.

/: si est al principio de la expresin, indica el nodo raz, si no, indica "hijo". Debe ir seguida del nombre de
un elemento.

/biblioteca/libro/autor <autor>Milan Kundera</autor>


<autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
/autor No devuelve nada porque <autor> no es hijo del
nodo raz.

/biblioteca/autor No devuelve nada porque <autor> no es hijo


de <biblioteca>.

/biblioteca/libro/autor/@fechaNacimiento fechaNacimiento="28/03/1936"
fechaNacimiento="28/03/1936"
/biblioteca/libro/@fechaNacimiento No devuelve nada porque <libro> no tiene el
atributo fechaNacimiento.

Nota: En XPath 1.0 no se puede seleccionar nicamente el valor del atributo, sino que se obtienen
respuestas del tipo nombreDelAtributo=ValorDelAtributo

//: indica "descendiente" (hijos, hijos de hijos, etc.).

/biblioteca//autor <autor>Milan Kundera</autor>


<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
//autor <autor>Milan Kundera</autor>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
//autor//libro No devuelve nada porque <libro> no es descendiente de <autor>.

//@ao ao="1973"
ao="1973"
ao="1969"
/..: indica el elemento padre.

/biblioteca/libro/autor/@fechaNacimiento/.. <autor fechaNacimiento="28/03/1936">Mario


Vargas Llosa</autor>
<autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
//@fechaNacimiento/../.. <libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
Nota: En estos ejemplos se seleccionan nicamente los nodos que tienen el atributo fechaNacimiento.

|: permite indicar varios recorridos.


//autor|//titulo <titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
//autor|//titulo|//@ao <titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
ao="1973"
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
ao="1973"
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
ao="1969"

Predicado (en ingls, predicate)


El predicado se escribe entre corchetes, a continuacin del eje. Si el eje ha seleccionado unos nodos, el predicado
permite restringir esa seleccin a los que cumplan determinadas condiciones.

[@atributo]: selecciona los elementos que tienen el atributo.


//autor[@fechaNacimiento] <autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>

[nmero]: si hay varios resultados selecciona uno de ellos por nmero de orden; last() selecciona el ltimo
de ellos

//libro[1] <libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
//libro[last()] <libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
//libro[last()-1] <libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>

[condicion]: selecciona los nodos que cumplen la condicin.

Los predicados permiten definir condiciones sobre los valores de los atributos. En las condiciones se
pueden utilizar los operadores siguientes:

o operadores lgicos: and, or, not()

o operadores aritmticos: +, -, *, div, mod

o operadores de comparacin: =, !=, <, >, <=, >=

Las comparaciones se pueden hacer entre valores de nodos y atributos o con cadenas de texto o numricas.
En el caso de las cadenas de texto deben estar rodeadeas por comillas simples o dobles. En el caso de las
cadenas numricas, las comillas son optativas.

o La condicin puede utilizar el valor de un atributo (utilizando @) o el texto que contiene el elemento.
En los ejemplos siguientes se obtienen respectivamente los elementos <fechaPublicacion> cuyo
atributo ao es posterior/mayor a 1970 y los elementos <libro> cuyo subelemento <autor> tiene como
contenido "Mario Vargas LLosa":

//fechaPublicacion[@ao>1970] <fechaPublicacion ao="1973"/>


<fechaPublicacion ao="1973"/>
//libro[autor="Mario Vargas <libro>
Llosa"] <titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>

o Para hacer referencia al propio valor del elemento seleccionado se utiliza el punto (.).

//@ao[.>1970] ao="1973"
ao="1973"

//autor[.="Mario Vargas <autor fechaNacimiento="28/03/1936">Mario Vargas


Llosa"] Llosa</autor>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
o Se pueden escribir varios predicados seguidos, cada uno de los cuales restringe los resultados del
anterior, como si estuvieran encadenados por la operacin lgica and.
En el ejemplo siguiente se seleccionan los libros escritos por Mario Vargas Llosa y publicados en
1973:

//libro[autor="Mario Vargas Llosa"] <libro>


[fechaPublicacion/@ao="1973"] <titulo>Pantalen y las visitadoras</titulo>
<autor
fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>

o Un predicado puede contener condiciones compuestas.


En los ejemplos siguientes se seleccionan, respectivamente , los libros escritos por Mario Vargas
Llosa y publicados en 1973 (primer ejemplo) y los libros escritos por Mario Vargas Llosa o publicados
en 1973 (segundo ejemplo):

//libro[autor="Mario Vargas <libro>


Llosa" and fechaPublicacion/@ao="1973"] <titulo>Pantalen y las
visitadoras</titulo>
<autor
fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
//libro[autor="Mario Vargas <libro>
Llosa" or fechaPublicacion/@ao="1973"] <titulo>La vida est en otra
parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Pantalen y las
visitadoras</titulo>
<autor
fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la
catedral</titulo>
<autor
fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>

Seleccin de nodos (en ingls, node test)


La seleccin de nodos se escribe a continuacin del eje y el predicado. Si el eje y el predicado han seleccionado
unos nodos, la seleccin de nodos indica con qu parte de esos nodos nos quedamos.

/node(): selecciona todos los hijos (elementos o texto) del nodo.


//node(): selecciona todos los descendientes (elementos o texto) del nodo.

//libro/node() <titulo>La vida est en otra parte</titulo>


<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
//autor/node() Milan Kundera
Mario Vargas Llosa
Mario Vargas Llosa
//libro//node() <titulo>La vida est en otra parte</titulo>
La vida est en otra parte
<autor>Milan Kundera</autor>
Milan Kundera
<fechaPublicacion ao="1973"/>
<titulo>Pantalen y las visitadoras</titulo>
Pantalen y las visitadoras
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
Mario Vargas Llosa
<fechaPublicacion ao="1973"/>
<titulo>Conversacin en la catedral</titulo>
Conversacin en la catedral
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
Mario Vargas Llosa
<fechaPublicacion ao="1969"/>

/text(): selecciona nicamente el texto contenido en el nodo.


//text(): selecciona nicamente el texto contenido en el nodo y todos sus descendientes.

//autor/text() Milan Kundera


Mario Vargas Llosa
Mario Vargas Llosa
//libro/text() No devuelve nada porque <libro> no contiene texto.

//libro//text() La vida est en otra parte


Milan Kundera
Pantalen y las visitadoras
Mario Vargas Llosa
Conversacin en la catedral
Mario Vargas Llosa

/*: selecciona todos los hijos (slo elementos) del nodo.


//*: selecciona todos los descendientes (slo elementos) del nodo.

/biblioteca/* <libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
//autor/* No devuelve nada porque <autor> slo contiene texto.

/biblioteca//* <libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
<libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>

/@*: selecciona todos los atributos del nodo.


//@*: selecciona todos los atributos de los descendientes del nodo.

//@* ao="1973"
fechaNacimiento="28/03/1936"
ao="1973"
fechaNacimiento="28/03/1936"
ao="1969"
//libro/@* No devuelve nada porque <libro> no tiene atributos.

//autor/@* fechaNacimiento="28/03/1936"
fechaNacimiento="28/03/1936"
Nota: En XPath 1.0 no se puede seleccionar nicamente el valor del atributo, sino que se obtienen
respuestas del tipo nombreDelAtributo=ValorDelAtributo

Pasos de bsqueda consecutivos


Una expresin XPath puede contener varios pasos de bsqueda consecutivos. Cada uno incluir su eje (y en su
caso, su predicado) y el ltimo paso de bsqueda incluir en su caso una seleccin de nodos. Cada paso de
bsqueda trabaja a partir de los nodos seleccionados por el paso de bsqueda anterior.
En el ejemplo siguiente se obtienen los ttulos de los libros publicados despus de 1970, mediante dos pasos de
bsqueda:

en el primer paso (//fechaPublicacion[@ao>1970]) se seleccionan los elementos <fechaPublicacion> cuyo


atributo ao es superior a 1970.

en el segundo paso (/../titulo), se seleccionan primero los elementos padre (/..) de los <fechaPublicacion>
seleccionados en el primer paso de bsqueda (es decir, elementos <libro>) y a continuacin sus
subelementos <titulo>.

//fechaPublicacion[@ao>1970]/../titulo <titulo>La vida est en otra parte</titulo>


<titulo>Pantalen y las visitadoras</titulo>
Un determinado resultado se puede obtener mediante un slo paso de bsqueda o mediante varios pasos.

En los ejemplos siguientes se obtienen los libros escritos por Mario Vargas Llosa de dos formas distintas:
o mediante un slo paso de bsqueda. Se seleccionan los elementos <libro> cuyo subelemento <autor>
tiene como contenido la cadena "Mario Vargas Llosa".

//libro[autor="Mario Vargas <libro>


Llosa"] <titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>

o mediante dos pasos de bsqueda. En el primer paso se seleccionan los elementos <autor> cuyo
contenido es la cadena "Mario Vargas Llosa". En el segundo paso de bsqueda se seleccionan los
elementos padre (es decir, los elementos <libro>).

//autor[.="Mario Vargas <libro>


Llosa"]/.. <titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas
Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>

En los ejemplos siguientes se obtiene el autor que ha publicado libros en 1969 de varias formas distintas:

//@ao[.=1969]/../../autor <autor fechaNacimiento="28/03/1936">Mario


Vargas Llosa</autor>
//libro[fechaPublicacion/@ao=1969]/autor <autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
//fechaPublicacion[@ao=1969]/../autor <autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
//autor[../fechaPublicacion/@ao=1969] <autor fechaNacimiento="28/03/1936">Mario
Vargas Llosa</autor>
Expresiones anidadas
Las expresiones XPath pueden anidarse, lo que permite definir expresiones ms complicadas. Por ejemplo, en el
documento utilizado anteriormente:
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<libro>
<titulo>La vida est en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Pantalen y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1973"/>
</libro>
<libro>
<titulo>Conversacin en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion ao="1969"/>
</libro>
</biblioteca>
Un ejemplo de expresin anidada sera, por ejemplo, obtener los ttulos de los libros publicados el mismo ao
que la novela "La vida est en otra parte". Esta informacin no est directamente almacenada en el documento,
pero se puede obtener la respuesta en dos pasos:

obtener primero el ao en que se public la novela "La vida est en otra parte":

//libro[titulo="La vida est en otra parte"]/fechaPublicacion/@ao ao="1973"

y obtener despus los ttulos de los libros publicados en 1973:

//libro[fechaPublicacion/@ao=1973]/titulo <titulo>La vida est en otra parte</titulo>


<titulo>Pantalen y las visitadoras</titulo>
Estas dos expresiones se pueden unir en una nica expresin, sustituyendo en la segunda expresin el valor 1973
por la primera expresin:
//libro[fechaPublicacion/@ao= //libro[titulo="La vida est en otra <titulo>La vida est en otra
parte</titulo>
parte"]/fechaPublicacion/@ao ]/titulo
<titulo>Pantalen y las
visitadoras</titulo>
Como cada una de las expresiones puede escribirse de varias maneras, en realidad hay muchas formas de
encontrar la respuesta. Por ejemplo, en la solucin siguiente los predicados se encuentran al final del eje en cada
subexpresin:
//titulo[../fechaPublicacion/@ao= //@ao[../../titulo="La vida est <titulo>La vida est en otra
parte</titulo>
en otra parte"] ]
<titulo>Pantalen y las
visitadoras</titulo>

Otro ejemplo de expresin anidada sera obtener los ttulos de los libros del mismo autor que la novela
"Pantalen y las visitadoras". Como en el ejemplo anterior, la respuesta puede obtenerse en dos pasos:

obtener primero el autor de la novela "Pantalen y las visitadoras":

//libro[titulo="Pantalen y las visitadoras"]/autor/text() Mario Vargas Llosa

y obtener despus los ttulos de los libros escritos por Mario Vargas LLosa:

//libro[autor="Mario Vargas Llosa"]/titulo <titulo>Pantalen y las visitadoras</titulo>


<titulo>Conversacin en la catedral</titulo>
Estas dos expresiones se pueden unir en una nica expresin, sustituyendo en la segunda expresin el valor
"Mario Vargas Llosa" por la primera expresin:
//libro[autor= //libro[titulo="Pantalen y las <titulo>Pantalen y las
visitadoras</titulo>
visitadoras"]/autor/text() ]/titulo
<titulo>Conversacin en la
catedral</titulo>
Un detalle importante es que no hay que escribir la primera expresin entre comillas.
Incluso se puede omitir la seleccin de nodos /text() de la segunda expresin y escribir la expresin XPath as:
//libro[autor= //libro[titulo="Pantalen y las <titulo>Pantalen y las
visitadoras</titulo>
visitadoras"]/autor ]/titulo
<titulo>Conversacin en la
catedral</titulo>

XPath: XML Path language (Resumen)

Sintaxis abreviada

elemento: selecciona el elemento.

@atributo: selecciona el atributo.


Eje (en ingls, axis)

/: si est al principio de la expresin, indica el nodo raz, si no, indica "hijo".

//: indica "descendiente" (hijos, hijos de hijos, etc.).

..: selecciona el elemento padre.

|: permite elegir varios recorridos.

Predicado (en ingls, predicate)


Los predicados se escriben entre corchetes

[@atributo]: selecciona los elementos que tienen el atributo.

[nmero]: si hay varios resultados selecciona uno de ellos por nmero de orden; last() selecciona el ltimo
de ellos.

[condicion]: selecciona los nodos que cumplen la condicin. La condicin puede utilizar el valor de un
atributo (utilizando @) o el texto que contiene el elemento.

En las condiciones se pueden utilizar los operadores siguientes:

o operadores lgicos: and, or, not().


o operadores aritmticos: +, -, *, div, mod.

o operadores de comparacin: =, !=, <, >, <=, >=.

Se pueden escribir varios predicados seguidos, teniendo en cuenta que cada uno restringe los resultados
del anterior, como si estuvieran encadenados por la operacin lgica and.

Seleccin de nodos (en ingls, node test)

node(): selecciona todos los nodos (elementos y texto).

text(): selecciona el contenido del elemento (texto).

*: selecciona todos los elementos.

@*: selecciona todos los atributos.

También podría gustarte