You are on page 1of 101

XPath

2
ndice
ntroduccin
Expresiones de camino
Pasos de localizacin
Ejes
Tests de nodos
Abreviaturas
Predicados
Expresiones lgicas, de igualdad, relacionales y
numricas
Librera de funciones
Ejemplos
Referencia rpida
3
XPath: ntroduccin
XPath es un lenguaje definido por W3C para
referirse a partes concretas de un documento XML
1
XPath: ntroduccin
5
XPath: ntroduccin

XPath: ntroduccin
XPath define un modelo en rbol para
codificar la estructura lgica de un
documento XML
Dicho rbol es construido despus de que
las referencias de entidad analizadas
hayan sido resueltas y la informacin de la
DTD (e.g. valores fijos o por defecto de
atributos) haya sido tenida en cuenta
Z
XPath: ntroduccin (cont.)
<biblioteca>
<libro titulo="El juego de Ender">
<copia edicion="1980"/>
<copia edicion="1987"/>
</libro>
<libro titulo="La fundacin">
<copia edicion="1999"/>
</libro>
</biblioteca>
<!-- Esta es mi biblioteca -->
EI eIemento raz deI
documento (<bibIioteca>) no
es eI eIemento raz deI rboI,
ya que puede haber ms cosas
en eI mismo niveI que eI
eIemento documento (por
ejempIo, eI comentario)
8
XPath:
ntroduccin
(cont.)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="people.xsl"?>
<!DOCTYPE people [
<!ATTLIST homepage xlink:type CDATA #FIXED "simple"
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
<!ATTLIST person id ID #IMPLIED>
]>
<people>
<person born="1912" died="1954" id="p342">
<name>
<first_name>Alan</first_name>
<last_name>Turing</last_name>
</name>
<!-- Did the word computer scientist exist in Turing's day? -->
<profession>computer scientist</profession>
<profession>mathematician</profession>
<profession>cryptographer</profession>
<homepage xlink:href="http://www.turing.org.uk/"/>
</person>
<person born="1918" died="1988" id="p4567">
<name>
<first_name>Richard</first_name>
<middle_initial>&#x4D;</middle_initial>
<last_name>Feynman</last_name>
</name>
<profession>physicist</profession>
<hobby>Playing the bongoes</hobby>
</person>
</people>
9
XPath:
ntroduccin
(cont.)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="people.xsl"?>
<!DOCTYPE people [
<!ATTLIST homepage xlink:type CDATA #FIXED "simple"
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
<!ATTLIST person id ID #IMPLIED>
]>
<people>
<person born="1912" died="1954" id="p342">
<name>
<first_name>Alan</first_name>
<last_name>Turing</last_name>
</name>
<!-- Did the word computer scientist exist in Turing's day? -->
<profession>computer scientist</profession>
<profession>mathematician</profession>
<profession>cryptographer</profession>
<homepage xlink:href="http://www.turing.org.uk/"/>
</person>
<person born="1918" died="1988" id="p4567">
<name>
<first_name>Richard</first_name>
<middle_initial>&#x4D;</middle_initial>
<last_name>Feynman</last_name>
</name>
<profession>physicist</profession>
<hobby>Playing the bongoes</hobby>
</person>
</people>
10
XPath:
ntroduccin
(cont.)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="17-2.xsl"?>
<PERIODIC_TABLE>
<ATOM STATE="GAS">
<NAME>Hydrogen</NAME>
<SYMBOL>H</SYMBOL>
<ATOMIC_NUMBER>1</ATOMIC_NUMBER>
<ATOMIC_WEIGHT>1.00794</ATOMIC_WEIGHT>
<BOILING_POINT UNITS="Kelvin">20.28</BOILING_POINT>
<MELTING_POINT UNITS="Kelvin">13.81</MELTING_POINT>
<DENSITY UNITS="grams/cubic centimeter">
<!-- At 300K, 1 atm -->
0.0000899
</DENSITY>
</ATOM>
<ATOM STATE="GAS">
<NAME>Helium</NAME>
<SYMBOL>He</SYMBOL>
<ATOMIC_NUMBER>2</ATOMIC_NUMBER>
<ATOMIC_WEIGHT>4.0026</ATOMIC_WEIGHT>
<BOILING_POINT UNITS="Kelvin">4.216</BOILING_POINT>
<MELTING_POINT UNITS="Kelvin">0.95</MELTING_POINT>
<DENSITY UNITS="grams/cubic centimeter">
<!-- At 300K -->
0.0001785
</DENSITY>
</ATOM>
</PERIODIC_TABLE>
11
XPath:
ntroduccin
(cont.)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="17-2.xsl"?>
<PERIODIC_TABLE>
<ATOM STATE="GAS">
<NAME>Hydrogen</NAME>
<SYMBOL>H</SYMBOL>
<ATOMIC_NUMBER>1</ATOMIC_NUMBER>
<ATOMIC_WEIGHT>1.00794</ATOMIC_WEIGHT>
<BOILING_POINT UNITS="Kelvin">20.28</BOILING_POINT>
<MELTING_POINT UNITS="Kelvin">13.81</MELTING_POINT>
<DENSITY UNITS="grams/cubic centimeter">
<!-- At 300K, 1 atm -->
0.0000899
</DENSITY>
</ATOM>
<ATOM STATE="GAS">
<NAME>Helium</NAME>
<SYMBOL>He</SYMBOL>
<ATOMIC_NUMBER>2</ATOMIC_NUMBER>
<ATOMIC_WEIGHT>4.0026</ATOMIC_WEIGHT>
<BOILING_POINT UNITS="Kelvin">4.216</BOILING_POINT>
<MELTING_POINT UNITS="Kelvin">0.95</MELTING_POINT>
<DENSITY UNITS="grams/cubic centimeter">
<!-- At 300K -->
0.0001785
</DENSITY>
</ATOM>
</PERIODIC_TABLE>
12
XPath: ntroduccin (cont.)
Dado que es un lenguaje abstracto, XPath
puede usarse en diversos contextos
XML Schema
XSLT
DOM
XPath puede recorrer el rbol en el orden del
documento (que es el orden en el que
aparecen los nodos al serializar el
documento) o en orden inverso
13
XPath: ntroduccin (cont.)
En XPath existen cuatro tipos de datos
boolean (true, false)
number (punto flotante 8 bytes EEE 754)
string (secuencia de caracteres Unicode)
node-set (conjunto de nodos sin duplicados)
Cualquier expresin XPath al final siempre devuelve uno de
estos cuatro tipos de datos
Se puede forzar un objeto de un tipo a otro tipo mediante las
funciones boolean(), number() y string()
Dicho cambio de tipo tambin ocurre implcitamente en caso
necesario (por ejemplo, cuando se le pasa un node-set a una
funcin que espera como argumento un string)
No existe funciones para (ni es posible) cambiar a node-set
desde los otros tres tipos de datos
11
XPath: ntroduccin (cont.)
Para convertir un node-set a los otros tipos hay que
convertirlo primero en string. Tal conversin depende del tipo
de nodo.
Existen 7 tipos de nodos
Caracteres Text
VaIor normaIizado deI atributo Attribute
Idem Root
Concatenacin de todos Ios nodos texto
descendientes
EIement
String-VaIue Node-type
Los nodos tipo texto contienen el maximo n posible de caracteres
ininterrumpidos por etiquetas de elementos. Esto es, las secciones
CDATA son integradas en los nodos tipo texto sin ninguna distincion
15
XPath: ntroduccin (cont.)
1
XPath: ntroduccin (cont.)
Los atributos xmlns son considerados nodos de tipo
namespace y no como nodos de tipo attribute. Adems,
dichos nodos aparecen asociados a todos los elementos
pertenecientes a dicho espacio de nombres y no slo al
elemento en el que se declar el espacio de nombres
Contenido deI comentario Comment
URI deI espacio de nombres Namespace
Caracteres que siguen aI target de Ia
instruccin de procesamiento
Processing
Instruction
String-VaIue Node-type
1Z
XPath: Expresiones de camino
Un camino (location path) es una secuencia de pasos que
se asemeja a la forma en que se identifican los directorios
en un sistema de ficheros, esto es, son una serie de pasos
(location steps) separados por /
Existen dos tipos de expresiones de caminos: absolutas y
relativas dependiendo de si la expresin parte del nodo raz
(/) o no
/asignatura/profesor/nombre
alumno/nota
La evaluacin de una expresin de camino siempre produce
un conjunto de nodos (node-set)
Existe el operador | que permite unir los conjuntos de nodos
resultantes de dos expresiones de camino
/asignatura/profesor/nombre | alumno/nombre
18
XPath: Expresiones de camino (cont.)
19
XPath: Expresiones de camino (cont.)
20
XPath: Expresiones de camino (cont.)
Para evaluar una expresin de camino hay que tener en
cuenta dos conceptos
context node-set
Se define como el conjunto de nodos actual que ha sido
identificado hasta un punto concreto de la expresin de
camino
context node
Se define como el nodo concreto (de entre los del context
node-set) que est siendo actualmente procesado
Si la expresin de camino es absoluta, entonces el context
node-set de partida lo forma nicamente el nodo raz
Si la expresin no es absoluta, el context node-set inicial
lo forma el context node desde el que se evala la
expresin
21
XPath: Expresiones de camino (cont.)
Las expresiones de camino se evalan de
izquierda a derecha, un paso tras otro
Cada paso es evaluado respecto de cada uno de
los nodos del context node-set
El node-set resultante de unir los resultados de
evaluacin de cada uno de los context node
forman el context node-set que se utilizar para el
siguiente paso
El node-set resultante de evaluar el ltimo paso es
el resultado de la expresin completa
22
XPath: Pasos de localizacin
Un paso de localizacin (location step) identifica un
node-set a partir de un context node
Componentes de un paso de localizacin
Eje (axis)
Test de nodo (node-test)
Predicados (opcionales y entre corchetes)
Sintaxis
axis::node-test[predicado1][predicado2]...
EjempIo:
/chiId::aIumnos/chiId::aIumno[chiId::nota>=5]
23
XPath: Ejes
1. self
2. child
3. parent
4. descendant
5. descendant-or-self
6. ancestor
7. ancestor-or-self
8. following
9. following-sibling
10. preceding
11. preceding-sibling
12. attribute
13. namespace
21
XPath: Ejes (cont.)
Raiz
A
B
M
N
C
E I J
K
L
F
H
G
D
self = {E}
parent = {B}
child = {F,H}
descendant = {F,G,H}
descendant-or-self = {E,F,G,H}
ancestor = {B,A,Raz}
ancestor-or-self = {E,B,A,Raz}
following = {,J,K,L,M,N}
following-sibling = {,J}
preceding = {D,C}
preceding-sibling = {C}
25
XPath: Ejes (cont.)
En principio, cada uno de los 13 ejes tiene una
direccin y un tipo de nodo resultado
seIf, parent, attribute, namespace Ninguna
ancestor, ancestor-or-seIf, preceding,
preceding-sibIing
Reverse
chiId, descendant, descendant-or-seIf,
foIIowing, foIIowing-sibIing
Forward
Ejes Direccin
La direccin es importante cuando se especifican los
nodos por posicin. As, el primero en un eje con direccin
forward es el primer nodo en el orden del documento
mientras que si el eje es reverse entonces es el primero en
el orden inverso
2
XPath: Ejes (cont.)
Respecto al tipo de nodo resultado, la mayora de
ejes genera un tipo de nodo Element, salvo el eje
attribute (que tiene un tipo de nodo resultado
Attribute) y el eje namespace (que tiene un tipo
de nodo resultado Namespace)
El tipo de nodo resultado de un eje slo es
importante cuando se localizan los nodos por
nombre o con comodn (*). En esos casos slo se
consideran como candidatos aquellos nodos cuyo
tipo coincide con el tipo de nodo resultado de ese
eje
2Z
XPath: Tests de nodos
Se trata de un test que se aplica a los nodos del
eje
Si un nodo cumple el test, entonces dicho nodo
permanece en el node-set provisional
Si el nodo no cumple el test, entonces se elimina
el nodo del node-set provisional
Hay dos tipos de tests de nodos
Por tipo de nodo
Por nombre
28
XPath: Tests de nodos (cont.)
Test de nodos por tipo de nodo
text()
dentifica los nodos tipo texto
comment()
dentifica los nodos tipo comentario
processing-instruction(target?)
dentifica instrucciones de procesamiento (bien todas o, si
se especifica el argumento, aqullas que tienen ese target)
node()
dentifica todos los nodos independientemente de su tipo
child::text()
/child::processing-instruction(`xml-stylesheet')
/descendant::alumno/descendant-or-self::node()
29
XPath: Tests de nodos (cont.)
Test de nodo por nombre
Consiste en especificar un nombre cualificado
Se puede usar * solo o con prefijo
Todos los nodos que pertenezcan al eje y que no sean del
tipo resultado de ese eje se descartan a priori
Los que quedan son comparados (en base al uri del
espacio de nombres y no al prefijo) con el nombre
cualificado especificado
Si no se usa prefijo entonces se supone que el nombre no
pertenece a ningn espacio de nombres (esto es, no se
consideran espacios de nombres por defecto)
/descendant::mag:alumno/attribute::id
30
XPath: Tests de nodos (cont.)
31
XPath: Tests de nodos (cont.)
32
XPath: Tests de nodos (cont.)
Existen, pues, bsicamente 3 expresiones comodines:
*
Selecciona todos los nodos elementos del eje correspondiente pero
no otros tipos de nodos (texto, atributo, espacio de nombres,
comentario e instrucciones de proceso)
node()
Selecciona todos los tipos de nodos (elemento, texto, atributo,
espacio de nombres, comentario e instrucciones de proceso)
attribute::*
Selecciona todos los atributos (menos los xmlns)
Se puede poner un prefijo delante de los comodines
prefijo:* attribute::prefijo:*
La expresin " * | attribute::* " permite seleccionar
todos los elementos y atributos del context node-set
33
XPath: Abreviaturas
Para que las expresiones de camino sean ms
compactas estn definidas ciertas abreviaturas
[n] [position()=n]
// /descendant-or-seIf::node()/
.. parent::node()
. seIf::node()
@ attribute::
(nada) chiId::
Abreviatura Sin abreviar
/asignatura/@codigo /child:asignatura/attribute::codigo
//profesor /descendant-or-self::node()/child::profesor
/asignatura/profesores /child::asignatura/child::profesores
Abreviatura Sin abreviar
31
XPath: Predicados
Un predicado es una expresin (lgica, de
igualdad, relacional o numrica) que es evaluada y
el resultado forzado a booIean
Pueden aparecer cero o ms predicados
Se ponen entre corchetes detrs del test de nodos
Se aplican secuencialmente de izquierda a
derecha
Cada predicado hace un filtro del node-set
resultado provisional descartando del mismo
aquellos nodos del mismo que no cumplan la
condicin especificada en el predicado
35
XPath: Predicados (cont.)
3
XPath: Predicados (cont.)
3Z
XPath: Expresiones lgicas, de
igualdad, relacionales y numricas
Las expresiones de camino de localizacin que hemos visto
hasta ahora no son las nicas expresiones en XPath
Tambin existen
Expresiones Igicas
Expresiones de iguaIdad
Expresiones reIacionaIes
Expresiones numricas
Aparte de en los predicados de las expresiones de camino,
estas expresiones se pueden usar de forma independiente
Suelen devolver un valor boolean o number
Aparte, existe una librera de funciones, las cuales pueden
devolver cualquier tipo XPath (node-set, string, number o
boolean)
38
XPath: Expresiones lgicas
Se suelen usar en los predicados
Emplean los operadores or y and
Devuelven true o faIse
Cada operando es evaluado previamente y forzado a booIean
La conversin a boolean depende del tipo de nodo a convertir
/asignatura[profesores] or /asignatura[profesor]
//alumno[nota or noPresentado]
//alumno[(nota>=7) and (nota<9)]
Ejemplos
true si eI nmero es distinto de cero y distinto de NaN number
true si Ia cadena es no vaca (esto es, Iongitud no nuIa) string
true si eI string-vaIue deI node-set no es Ia cadena vaca node-set
VaIor booIean Tipo de nodo
39
XPath: Expresiones de igualdad
Emplean los operadores = y !=
Devuelven true o faIse segn que los objetos comparados
sean iguales o diferentes
Cuando uno de los operados es un node-set, entonces la
igualdad (o la distincin) se cumple si se cumple para
alguno de los nodos del conjunto.
Esto hace que sea posible (y de hecho bastante comn)
que dos operandos puedan ser iguales y distintos al mismo
tiempo
Por tanto, dos node-sets son iguales (resp. distintos) si
algn nodo de uno de los conjuntos es igual a (resp. distinto
de) alguno de los nodos del otro conjunto
10
XPath: Expresiones de igualdad (cont.)
Un node-set es igual (resp. distinto) a un string si contiene un
nodo cuyo string-value coincide (resp. no coincide) con l
Un node-set es igual (resp. distinto) a un boolean si contiene
un nodo cuyo string-value convertido a boolean coincide
(resp. no coincide) con l
Un node-set es igual (resp. distinto) a un number si contiene
un nodo cuyo string-value convertido a number coincide
(resp. no coincide) con l
not(nota = 10)
nota != 10
not(nota != 10)
nota = 10
Ejemplos
11
XPath: Expresiones de igualdad (cont.)
Si ninguno de los dos operandos es un node-set y los
operandos son de tipos diferentes entonces se realiza una
conversin de tipos implcita para igualar los tipos de los
objetos comparados
La conversin la hace el tipo de menor precedencia donde
la precedencia de los tipos es
"5.7=5.7
true()!=10
true()="cadena
Ejemplos
string 3
number 2
booIean 1 (mxima)
Tipo de nodo Precedencia
12
XPath: Expresiones relacionales
Emplean los operadores < , <= , > y >=
Devuelven true o faIse
Los dos operandos son convertidos implcitamente a number
en caso de que no lo fuesen
La conversin a number depende del tipo de nodo a convertir
true es convertido a 1 y faIse a 0 booIean
Se convierte a un punto fIotante deI tipo IEEE 754. Si eI
string no es un nmero entonces se convierte en NaN
string
VaIor number Tipo de nodo
13
XPath: Expresiones relacionales (cont.)
Si uno de los operandos es un node-set, entonces la
comparacin es realizada sucesivamente con cada uno de
los nodos del conjunto (usando su correspondiente string-
value convertido a number) dando un resultado true si al
menos una de las comparaciones es true
not(nota>following::nota))
@referencia>=1000
count(nota)<4
not(nota<preceding::nota)
nota<5
Ejemplos
11
XPath: Expresiones numricas
Devuelven un valor number
Los dos operandos son convertidos implcitamente a
number en caso de que no lo fuesen
Emplean los operadores + , - , * , div , mod y - unitario
Salvo uso de parntesis, el orden de los operadores es el
siguiente
+ 6
- 5
div 4
mod 3
* 2
- unitario 1 (mxima)
Operador Precedencia
15
XPath: Expresiones numricas (cont.)
position()-1
precio-floor(precio)
sum(nota) div count(nota)
precio*cantidad
Ejemplos
1
XPath: Librera de funciones
Existen una serie de funciones que todas las
implementaciones del lenguaje XPath deben soportar
obligatoriamente
Las funciones de la librera no pertenecen a ningn espacio
de nombres y, por tanto, no usan prefijo
Ahora bien, las implementaciones pueden definir funciones
adicionales las cuales deben estar asociadas a un espacio
de nombres y usar su correspondiente prefijo
Las funciones string() , number() y booIean() convierten a
los tipos correspondientes de acuerdo con las reglas que
ya hemos visto
Cuando una funcin espera un argumento de un tipo
determinado se produce una conversin implcita
1Z
XPath: Librera de funciones (cont)
Funciones con node-sets
DevueIve un string con eI nombre IocaI deI primer nodo deI
node-set segn eI orden deI documento. Si eI node-set es
vaco devueIve "". Si no se Ie pasa argumento considera
que se Ie ha pasado eI context node
IocaI-name(n-s?)
DevueIve Ios nodos cuyo atributo tipo ID coincida con Ios
deI argumento de Ia funcin. EI argumento es convertido a
string y se separan Ios token que Io forman. Si eI
argumento es node-set se hace esto con eI string-vaIue de
cada uno de Ios nodos deI node-set
id(argumento)
DevueIve un number con eI tamao (esto es, eI n de
nodos) deI context node-set
Iast()
DevueIve true o faIse segn eI context-node tenga o no
asociado (mediante su atributo xmI:Iang o eI de un
antecesor) eI Ienguaje especificado en eI argumento. La
comparacin se hace sin diferenciar mayscuIas y
minscuIas y no tiene en cuenta Ios sufijos separados por -
Iang("Ienguaje")
Descripcin Funcin
18
XPath: Librera de funciones (cont)
Funciones con node-sets (cont.)
DevueIve eI ndice (empezando por 1) que ocupa eI
context node en eI context node-set
position()
DevueIve un string con eI URI deI primer nodo deI
node-set segn eI orden deI documento. Si eI node-set
es vaco o eI nodo no tiene namespace devueIve "". Si
no se Ie pasa argumento considera que se Ie ha pasado
eI context node
namespace-uri(n-s?)
DevueIve un string con eI nombre cuaIificado deI
primer nodo deI node-set segn eI orden deI
documento. Si eI node-set es vaco devueIve "". Si no
se Ie pasa argumento considera que se Ie ha pasado eI
context node
name(n-s?)
Descripcin Funcin
19
XPath: Librera de funciones (cont)
Funciones booleanas
DevueIve eI vaIor booIeano true true()
DevueIve eI vaIor booIeano faIse faIse()
DevueIve true si eI argumento es faIse y viceversa not(argumento)
Convierte eI argumento en booIean de acuerdo con
Ias regIas ya comentadas.
booIean(argumento)
Descripcin Funcin
50
XPath: Librera de funciones (cont)
Funciones numricas
Convierte eI argumento en number de acuerdo con Ias
regIas ya comentadas
number(argumento)
Convierte Ios string-vaIue de cada uno de Ios nodos deI
node-set en number y devueIve Ia suma
sum(n-s)
DevueIve eI n de nodos en eI node-set que se Ie pasa count(n-s)
DevueIve eI entero ms cercano aI argumento. En caso
de empate redondea hacia arriba. Si eI argumento es
NaN, infinito o cero devueIve eI vaIor pasado.
round(nmero)
DevueIve eI mayor entero que es menor o iguaI que eI
argumento
fIoor(nmero)
DevueIve eI menor entero que es mayor o iguaI que eI
argumento
ceiIing(nmero)
Descripcin Funcin
51
XPath: Librera de funciones (cont)
Funciones con cadenas de caracteres
Concatena Ias cadenas de string pasadas (mnimo 2) concat(cad,cad, cad*)
DevueIve true si cad1 comienza con cad2 starts-with(cad1,cad2)
DevueIve Ia cadena pasada pero convirtiendo todos
Ios tabuIadores,retornos de carro y Iine-feed en
espacios en bIanco, coIapsndoIos y quitando Ios
que sean Ieading y traiIing. Si no se Ie pasa
argumento considera eI string-vaIue deI context
node
normaIize-space(cad?)
DevueIve true si cad1 contiene a cad2 contains(cad1,cad2)
Descripcin Funcin
52
XPath: Librera de funciones (cont)
Funciones con cadenas de caracteres (cont.)
DevueIve eI n de caracteres de Ia cadena pasada. Si
no hay argumento usa eI string-vaIue deI context
node.
string-Iength(cad?)
Si eI argumento es un node-set, devueIve eI string-
vaIue deI primer nodo segn eI orden deI documento.
Si no hay argumento usa eI context node.
Si eI argumento es booIean devueIve "true" o "faIse"
Si eI argumento es number se convierte a string
expresndoIo en formato decimaI con un signo -
deIante si es negativo. No se incIuye punto decimaI si
es entero. Si es NaN devueIve "NaN". Si es infinito
devueIve "Infinity" o "-Infinity"
string(argumento?)
Descripcin Funcin
53
XPath: Librera de funciones (cont)
Funciones con cadenas de caracteres (cont.)
DevueIve Ia subcadena de cad1 que precede a Ia
primera ocurrencia de cad2. Si cad1 no contiene a
cad2 devueIve ""
substring-before(cad1,cad2)
DevueIve una cadena basndose en cad1 pero
sustituyendo cada carcter de cad2 por eI
correspondiente de cad3. Si cad1 tiene un carcter
que no est en cad2 cada vez que ocurra ese
carcter en cad1 es eIiminado
transIate(cad1,cad2, cad3)
DevueIve Ia subcadena de cad1 que sigue a Ia
primera ocurrencia de cad2. Si cad1 no contiene a
cad2 devueIve ""
substring-after(cad1,cad2)
DevueIve Ia subcadena formada por Ios num2
caracteres de cad1 que hay a partir de Ia posicin
num1 (empezando por 1). Si no se especifica num2
se devueIve desde num1 hasta eI finaI de cad
substring(cad,num1,num2?)
Descripcin Funcin
51
XPath:
Ejemplos
<?xml version="1.0" ?>
<listaCompras>
<cliente>
<nombre>Ricardo Tapia</nombre>
<dni>50.988.654</dni>
</cliente>
<producto>
<nombre>Ternera</nombre>
<cantidad unidad="Kg.">3</cantidad>
<distribuidor NF="Q45872267">
<nombre>Distribuciones Crnicas S.L.</nombre>
</distribuidor>
</producto>
<producto>
<nombre>Jamn Cocido</nombre>
<cantidad unidad="gr.">500</cantidad>
</producto>
<producto CAD="01/12/00">
<nombre>Judias Verdes</nombre>
<cantidad unidad="Kg.">2</cantidad>
</producto>
</listaCompras>
55
XPath: Ejemplos
5
XPath: Ejemplos (cont.)
5Z
XPath: Ejemplos (cont.)
58
XPath: Ejemplos (cont.)
59
XPath: Ejemplos (cont.)
0
XPath: Ejemplos (cont.)
1
XPath: Ejemplos (cont.)
2
XPath: Ejemplos (cont.)
3
XPath: Ejemplos (cont.)
1
XPath: Ejemplos (cont.)
5
XPath: Ejemplos (cont.)

XPath: Ejemplos (cont.)


Z
XPath: Ejemplos (cont.)
8
XPath: Ejemplos (cont.)
9
XPath: Ejemplos (cont.)
Z0
XPath: Ejemplos (cont.)
Z1
XPath: Ejemplos (cont.)
Z2
XPath: Ejemplos (cont.)
Z3
XPath: Ejemplos (cont.)
<?xml version="1.0"?>
<!-- Edited with XML Spy v4.2 -->
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
.
.
</catalog>
Z1
XPath: Ejemplos (cont.)
Z5
XPath: Ejemplos (cont.)
<?xml version="1.0" encoding="SO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
.
.
.
</catalog>
Z
XPath: Ejemplos (cont.)
<?xml version="1.0" encoding="SO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
.
.
.
</catalog>
ZZ
XPath: Ejemplos (cont.)
Z8
XPath: Ejemplos (cont.)
Z9
XPath: Ejemplos (cont.)
80
XPath: Ejemplos (cont.)
81
XPath: Ejemplos (cont.)
82
XPath: Ejemplos (cont.)
83
XPath: Ejemplos (cont.)
81
XPath: Ejemplos (cont.)
85
XPath: Ejemplos (cont.)
8
XPath: Ejemplos (cont.)
8Z
XPath: Ejemplos (cont.)
88
XPath: Ejemplos (cont.)
89
XPath: Ejemplos (cont.)
90
XPath: Ejemplos (cont.)
91
XPath: Ejemplos (cont.)
92
XPath: Ejemplos (cont.)
93
XPath: Ejemplos (cont.)
91
XPath: Ejemplos (cont.)
95
XPath: Ejemplos (cont.)
9
XPath: Ejemplos (cont.)
9Z
XPath: Ejemplos (cont.)
98
XPath: Ejemplos (cont.)
99
XPath: Ejemplos (cont.)
100
XPath: Ejemplos (cont.)
101
XPath: Referencia rpida