Documentos de Académico
Documentos de Profesional
Documentos de Cultura
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
Paths compuestos
Los location Paths pueden concatenarse con
“/”
Ejemplos Xpath: /AAA/*/*
<AAA>
Xpath: /AAA/DDD/BBB
<BBB/>
<AAA>
<CCC>
<BBB/>
<DDD>
<CCC/>
<EEE/
<BBB/>
</DDD>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
<BBB/>
</DDD>
<DDD>
<CCC/>
<BBB/>
</AAA>
</DDD>
<CCC/>
</AAA>
Paths compuestos (II)
Selección de todos los descendientes
Sintaxis: //
Si se expresa en primer lugar indica todos los descendientes
desde el raíz
Ejemplos Xpath: /AAA/DDD//*
<AAA>
<BBB/>
<CCC/>
Xpath: //BBB <BBB/>
<AAA> <DDD>
<CCC>
<BBB/> <EEE>
<CCC/> <XXX/>
</EEE>
<BBB/> </CCC>
<BBB/> </DDD>
<DDD> <CCC>
<DDD>
<BBB/>
<BBB/> <BBB/>
<CCC/>
</DDD> </DDD>
<CCC/> </CCC>
</AAA> </AAA>
Paths compuestos (III)
Selección del nodo padre
Sintaxis: ..
Ejemplos
Xpath: //BBB/.. Xpath: /AAA/DDD/CCC/..
<AAA>
<AAA> <BBB/>
<BBB/> <CCC/>
<BBB/>
<CCC/> <DDD>
<BBB/> <CCC>
<BBB/> <EEE/>
</CCC>
<DDD> </DDD>
<DDD>
<DDD>
<BBB/> <BBB/>
</DDD> <BBB/>
<CCC/> <CCC/>
</DDD>
</AAA> </DDD>
</AAA>
Paths compuestos (IV)
Selección del nodo contexto
Sintaxis: .
Ejemplos
Xpath: //BBB/. Xpath: /AAA/DDD/.
<AAA>
<AAA> <BBB/>
<BBB/> <CCC/>
<BBB/>
<CCC/> <DDD>
<BBB/> <CCC>
<BBB/> <EEE/>
</CCC>
<DDD> </DDD>
<DDD>
<DDD>
<BBB/> <BBB/>
</DDD> <BBB/>
<CCC/> <CCC/>
</DDD>
</AAA> </DDD>
</AAA>
Predicados
Filtros para refinar más un location path
Consisten en expresiones booleanas
Se aplican a cada Location path por separado
Sintaxis: path[expresion-booleana]
Ejemplos:
Primer nodo AAA en todo el documento
//AAA[1]
Evaluación del contenido del nodo elemento
//AAA[.=“contenido”]
Evaluación de nodos con atributo dado o atributo con valor dado
//AAA[@id]
//AAA[@id=‘1234’]
Nodos con nombre de elemento dado
//*[name()=‘AAA’] //AAA
Comparación de valores: < > <= >= = !=
//AAA[@id >= 12]
Ojo: Si Xpath detro de XML: ‘<‘ ‘<’
Concatenaciones booleanas: and, or
//AAA[@id >= 12 and @id < 20]
Location Paths sin abreviar
Hasta ahora hemos visto forma abreviada (/, .., //, .)
La más utilizada
Location path completo compuesto por:
eje::test-nodos[predicado]
Partes
eje: Indica la dirección en la que viajar
test-nodos: Condición que han de cumplir los nodos
predicado: Expresiones booleanas adicionales. Opcional
Ejemplo
Versión abreviada: AAA/BBB/CCC/@id
Versión sin abreviar:
child::AAA/child::BBB/child::CCC/attribute::id
Location Paths sin abreviar (II)
Tipos de ejes
Equivalentes a forma abreviada: child (nombre), self (self::*.),
parent (parent::* ..)
Nuevos. Siempre con referencia del nodo de contexto
ancestor nodo padre y ascendencia hasta raíz
ancestor-or-self incluye el nodo contexto
descendant nodos hijos y descendencia
descendant-or-self incluye el nodo contexto
following-sibling siguientes nodos al mismo nivel que el de
contexto hijos del mismo padre
preceding-sibling como el anterior pero anteriores al nodo
contexto
preceding anteriores nodos hasta ppio del doc a cualquier nivel
following siguientes nodos hasta fin del doc a cualquier nivel
namespace todos los nodos de un namespace
Location Paths sin abreviar
(III)
Ejemplos forma completa
Xpath: Xpath:/AAA/BBB/DDD/CC Xpath://CCC/preceding-
/AAA/BBB/descendant::* C/ancestor::* <AAA> sibling::*
<AAA> <BBB>
<AAA>
<BBB> <DDD>
<BBB>
<DDD> <CCC>
<DDD>
<CCC> <DDD/>
<EEE/>
<DDD/> <EEE/>
<CCC>
<EEE/> </CCC>
<DDD/>
</CCC> </DDD>
<EEE/>
</DDD> </BBB>
</CCC>
</BBB> <CCC>
</DDD>
<CCC> <DDD>
</BBB>
<DDD> <EEE>
<CCC>
<EEE> <DDD>
<DDD>
<DDD> <FFF/>
<EEE>
<FFF/> </DDD>
<DDD>
</DDD> </EEE>
<FFF/>
</EEE> </DDD>
</DDD>
</DDD> </CCC>
</EEE>
</CCC> </AAA>
</DDD>
</AAA>
</CCC>
</AAA>
Expresiones generales
Otras expresiones aparte de Location Paths
Numéricas
Cadenas
Booleanas
Números
Expresión Xpath válida: 3.141529
Todos los números Xpath se consideran 8-byte, IEEE 754
(doubles de Java). ±4.94065645841246544e-324 ~
±1.79769313486231570e+308
Operaciones permitidas: + - * div mod
Ejemplo expresión XPath:
(8.5E45 * 2) mod @id
Expresiones generales (II)
Cadenas
Cualquier cadena unicode es una expresión Xpath válida
Únicamente no puede contener el carácter que la delimite (‘ ó
“).
Ejemplos: “hola” “τσπξχ” “”ضغلمنسش
Las cadenas se pueden comparar “hola” != “Hola”
Booleanos
Valores: true() false()
Las comparaciones devuelven booleanos: “1.5” >= “-
1.2”
Los operadores lógicos agrupan booleanos:
not( (1.5 < 5) and true() ) or false()
Funciones
Xpath dispone de varias funciones. Las funciones pueden
devolver: booleanos, números, grupos de nodos, cadenas
Las conversiones automáticas son posibles excepto desde y
hacia grupos de nodos
Funciones de nodos
position() Devuelve número de nodo dentro de la lista de
nodos de contexto (XSLT)
<xsl:template match="person">
Person <xsl:value-of select="position( )"/>,
<xsl:value-of select="name"/>
</xsl:template>
last() Devuelve el último nodo de la lista de contexto
count(nodeset) Cuenta el nº de nodos del conjunto pasado
como argumento
Ej. count(//BBB) 2
Funciones (II)
Funciones de nodos (II)
id(nodeset) Devuelve nodo con atributo
definido como ID en DTD igual a argumento
Ej. id(“a1234”) <persona
identidad=“a1234”>
local-name(nodeset) Nombre de primer
nodo en nodeset sin prefijo
name(nodeset) Nombre de primer nodo
completo
Ejemplo: name(//aa:AAA) = “aa:AAA”, local-
name(//aa:AAA) = “AAA”
namespace-uri(nodeset) Devuelve uri de
namespace de primer nodo en nodeset
Funciones (III)
Ejemplos funciones de nodo
XPath: //BBB[position() XPath: //BBB[last()]
mod 2 = 0] <AAA>
<AAA> <DDD>
<DDD> <BBB id="a1"/>
<BBB id="a1"/> <BBB id="a2"/>
<BBB id="a2"/> <BBB id="a3"/>
<BBB id="a3"/> <BBB id="a4"/>
<BBB id="a4"/> <BBB id="a5"/>
<BBB id="a5"/> <CCC/>
<CCC/> <CCC/>
<CCC/> </DDD>
</DDD> <DDD>
<DDD> <CCC/>
<CCC/> <BBB id="b1"/>
<BBB id="b1"/> <BBB id="b2"/>
<BBB id="b2"/> <BBB id="b3"/>
<BBB id="b3"/> <BBB id="b4"/>
<BBB id="b4"/> </DDD>
</DDD> </AAA>
</AAA>
Funciones (IV)
Funciones de cadena
string(cualquier-cosa) Convierte a cadena
Ej. string(true()) “true”
Con nodesets saca texto de primer nodo
<a>aa<b>bb</b></a> string(//*) = “aa”
starts-with(cadena-completa,subcadena)
Ej. starts-with(“Pepelui”, “Pe”) true()
contains(cadena-completa,subcadena)
Ej: contains(“aeIou”, “eI”) true()
substring-before(cadena, subcadena)
Ej: substring-before(“DD/MM/AAAA”, “/”) “DD”
substring-after(cadena, subcadena)
Ej: substring-after(“DD/MM/AAAA”, “/”) “MM/AAAA”
substring (cadena, inicio [,longitud])
Ej: substring(“DD/MM/AAAA”, 3) “/MM/AAAA”
string-length(cadena)
Ej: substring(“DD/MM/AAAA”, 3) “/MM/AAAA”
normalize-space(cadena) Elimina espacios extra
Funciones (V)
Ejemplos funciones cadenas
XPath: //*[string- XPath:
length(name()) > 3] //@*[substring(.,2) > 2]
<AAA>
<AAA> <DDD>
<Q/> <BBB id="a1"/>
<SSSS/> <BBB id="a2"/>
<BB/> <BBB id="a3"/>
<CCC/> <BBB id="a4"/>
<BBB id="a5"/>
<DDDDDDDD/>
<CCC/>
<EEEE/> <CCC/>
</AAA> </DDD>
<DDD>
<CCC/>
<BBB id="b1"/>
<BBB id="b2"/>
<BBB id="b3"/>
<BBB id="b4"/>
</DDD>
</AAA>
Funciones (VI)
Funciones booleanas
true() false() not(expr)
Funciones numéricas
number() convierte a número
number(nodeset) = number(string(nodeset))
Ej.: number(“7.5”) = 7.5 number(“Pedro”) = NaN
Extracción de parte entera
round(4.6) = 5
floor(4.6) = 4
ceiling(4.2) = 5
sum(nodeset) Convierte cada nodo en número y lo
suma
Funciones (VII)
Ejemplo funciones numéricas
XPath: //BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 +
0.5) ]
<AAA>
<BBB id="1"/>
<BBB id="2"/>
<BBB id="3"/>
<BBB id="4"/>
<BBB id="5"/>
<BBB id="6"/>
<BBB id="7"/>
<BBB id="8"/>
<CCC/>
<CCC/>
<CCC/>
</AAA>