XPath
Ing. Hernández López Augusto
Introducción



Es un lenguaje para encontrar información en un
documento XML. Es utilizado para navegar a través de
elementos y atributos.
Es el mayor componente en el estándar XSLT – XQuery
y XPointer utilizan las expresiones XPath.
Se convirtió en un estándar recomendado por la W3C en
1999
¿Qué es XPath?





Es una sintaxis para definir partes de un documento XML
Utiliza expresiones de trayectorias para navegar en
documentos XML
Contiene una biblioteca de funciones estándar
Es el mayor componente en XSLT
Es un estándar de la W3C
Uso de XPath




Con DOM/SAX es posible navegar sobre el documento
conociendo su estructura exacta, se debe especificar si
busca en el padre, hermanos, hijos, etc.
Mediante XPath es posible localizar nodos en el
documento XML.
Esta diseñado para procesa árboles y facilitar la referencia
de los datos en la jerarquía.
Se basa en expresiones similares a las expresiones
regulares, diseñadas para la estructura jerárquica de XML.
Expresiones XPath


Se utilizan expresiones para seleccionar nodos o
conjuntos de nodos.
Son expresiones similares a las utilizadas en el sistema de
archivos tradicional.
Funciones Estándar XPath


Incluye cerca de 100 funciones.
Existen funciones para valores de cadenas, numéricas,
fechas, comparación de hora, nodos, manipulación del
QName, secuencias, valores booleanos, etc.
Terminología

Nodos: Existen diferentes tipos: elemento, atributo, texto,
instrucción de procesamiento, comentario y documento
(raíz). Se maneja como un árbol de nodos
<libreria> (nodo documento)
<autor>J K. Rowling</autor> (nodo elemento)
lenguaje="es" (nodo atributo)
Terminología


Valores Atómicos: Son aquellos nodos que no tienen
hijos (hojas) o padres (atributos).
Artículo: Son valores atómicos o nodos.
Relaciones entre Nodos





Padre: Cada elemento y atributo tiene un padre.
Hijo: Los nodos elemento pueden tener cero, uno o
más hijos.
Hermanos, Vecinos: Nodos que tienen el mismo
padre.
Ancestros: Un nodo padre, su padre, el padre de su
padre, etc.
Descendientes: Un nodo hijo, los hijos de sus hijos,
etc.
Sintaxis XPath




XPath utiliza expresiones de trayectorias para
seleccionado nodos o conjuntos de nodos en un
documento XML. EL nodo es seleccionado mediante
una trayectoria o pasos.
Una trayectoria esta compuesta de uno o más pasos
Cada paso esta compuesto de un eje, un nodo y
opcionalmente predicados. Una pareja de dos puntos
(::) separa el eje del nodo y cada predicado se pone
entre paréntesis cuadrados []
Se pueden especificar trayectorias:


Absolutas, si parte de la raíz del documento. /
Relativas, si parte del nodo donde se encuentra.
Selección de Nodos

Los nodos se seleccionan con las siguientes
trayectorias o pasos, estas son las expresiones más
usuales:
nombrenodo
Selecciona todos los nodos hijos del nodo
nombrado
/
Selecciona desde el nodo raíz
//
Selecciona nodos en el documento desde el
nodo actual que corresponda a la selección no
importando donde esten
.
Selecciona el nodo actual
..
Selecciona el padre del nodo actual
@
Selecciona los atributos
Selección de Nodos: Ejemplo

La tabla siguiente muestra algunas expresiones y los
resultados de las mismas:
bookstore
Selecciona todos los nodos hijos del elemento
nodo bookstore
/bookstore
Selecciona el elemento raíz bookstore
bookstore/book
Selecciona todos los elementos book que son
hijos de bookstore
//book
Selecciona todos los elementos book no
importando donde estén.
bookstore//book
Selecciona todos los elementos book
descendientes de bookstore no importando
donde estén debajo de este.
[email protected]
Selecciona todos los atributos llamados lang
Predicados

Predicados son utilizados para encontrar nodos específicos o
un nodo que contiene un valor especifico. Están embebidos en
paréntesis cuadrados [].
bookstore/book[1]
Selecciona el primer elemento book
bookstore/book[last()]
Selecciona el ultimo elemento book
bookstore/book[position()<3] Selecciona dos elementos
bookstore/book[price>35.00] Selecciona todos los libros con precio
mayor a 35.0
//title[@lang=‘eng’]
Selecciona todos los elementos que
tienen atributo lang con valor ‘eng’
Nodos desconocidos
*
Cualquier nodo elemento
@*
Cualquier nodo atributo
node()
Cualquier nodo
/bookstore/*
Todos los nodos hijos de bookstore
//*
Todos los nodos del documento
//title[@*]
Todos los atributos del nodo title
Ejes




Un eje define un conjunto de nodos relativos al nodo
actual
Ancestro, ancestro o el mismo, hijo , descendiente,
descendiente o el mismo, siguientes, hermanos siguientes,
padre, precedentes, hermanos precedentes, el mismo,
atributos, espacio de nombres
Se antecede el eje con ::
P.ej  attribute::lang, child::*
Operadores
Una expresion XPath regresa un conjunto de
nodos, una cadena, un booleano o un número.
Operador
Descripción
Ejemplo
Valor de Retorno
|
Calcula dos conjuntos de nodos
//book | //cd
Regresa un conjunto de nodos con
book y cd
+
*
div
=
Suma
Resta
Multiplicación
División
Igualdad
6+4
6-4
6*4
8 div 4
price=9.80
10
2
24
2
true si price es 9.80
!=
Desigualdad
price!=9.80
false si price es 9.80
<
Menor que
price<9.80
true si price es menor 9.80
<=
Menor o igual que
price<=9.80
true si price es menor o igual que
9.80
>
Mayor que
price>9.80
true si price es mayor 9.80
>=
Mayor o igual que
price>=9.80
true si price es mayor o igual que
9.80
or
O
price=9.80 or price=9.70
true si price es igual que 9.80 o igual
que 9.70
and
Y
price>9.00 and price<9.90
true si price es mayor que 9.00 y
menor que 9.90
mod
Modulo (residuo división)
5 mod 2
1
Ejes en una trayectoría
Ejes
ancestor
Selecciona todos los ancestros del nodo actual (padre, abuelo, etc.)
ancestor-or-self
Selecciona todos los ancestros del nodo actual (padre, abuelo, etc.) y el nodo
actual
attribute
Selecciona todos los atributos del nodo actual
child
Selecciona todos los hijos del nodo actual
descendant
Selecciona todos los descendientes del nodo actual (hijo, nieto, etc.)
descendant-or-self
Selecciona todos los descendientes del nodo actual (hijo, nieto, etc.) y el nodo
actual
following
Selecciona todo en el documento que esta a partir del nodo actual
following-sibling
Selecciona todos los hermanos posteriores del nodo actual
namespace
Selecciona todos los nodos con el namespace del nodo actual
parent
Selecciona el padre del nodo actual
preceding
Selecciona todo en el documento que esta antes del nodo actual
preceding-sibling
Selecciona todos los hermanos anteriores al nodo actual
self
Selecciona el nodo actual
Prueba de nodos








Los ejes eligen la dirección que se va a dirigir, la prueba
de nodos determina qué tipo de nodos seleccionar a los
largo de los ejes:
nombre, cualquier elemento o atributo especificado
*, todos los nodos del tipo atributo
prefijo:*, cualquier elemento o atributo con el espacio de
nombres mapeado por el prefijo
comment(), cualquier comentario
text(), cualquier nodo de texto
node(), cualquier nodo
processing-instruction(), cualquier instrucción de proceso
Ejemplo books.xml

Con el archivo de ejemplo y ubicados en el nodo
//book[3], ejecutar las siguientes expresiones:








self::*
child::*
child::price
following::*
attribute::category
preceding-sibling::node()
preceding::comment()
descendant::author
Trayectorias compuestas




Para combinar los pasos en una trayectoria se utiliza
diagonal (/), por lo tanto el conjunto de nodos
seleccionados en el primer paso se convierte en el nodo
contexto del segundo paso y así sucesivamente:
//book[3]/following-sibling::node()/author
//book[3]/preceding-sibling::node()/year
/bookstore/child::book[child::year = 2003][2]
Trayectorias Abreviadas

Las trayectorias son equivalentes a lo siguiente:
child::nombre
nombre
/ancestor::node()/parent::node()
/
/descendant-or-self::node()/
//
self::node()
.
parent::node()
..
attribute::nombre
@nombre
Funciones XPath

Devuelven algún tipo siguiente:





node-set, una colección de nodos desordenada sin duplicados
string, una secuencia de caracteres
boolean, verdadero o falso
number, un numero real
Algunas funciones











number last()
number position()
number count(node-set)
string substring(str, str)
string concat(str, str, str*)
boolean starts-with(str, str)
boolean contains(str, str)
number string-lenght(str)
boolean not(boolean)
boolean true()
boolean false()
http://www.w3schools.com/XPath/xpath_functions.asp
http://www.w3.org/TR/xquery-operators/
Ejemplo XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Augusto Dobeslao -->
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
<price>29.99</price>
</book>
</bookstore>
Referencias


http://www.w3schools.com/XPath
XML in a Nutshell, A Desktop Quick Reference,
Elliotte Rusty Harold & W. Scott Means, O’Reilly 2001
Descargar

XPath