Xpath
Apuntes de guerrilla
Index
Rutas___________________________________________________3
Ejes____________________________________________________3-4
Nodos de comprobación___________________________________4
Predicados______________________________________________4
Expresiones y operadores__________________________________5
Funciones_______________________________________________5-6
Códigos de ejemplo_______________________________________7-9
Referencias_____________________________________________10
2
Rutas
Ruta absoluta
Para seleccionar un elemento del xml podemos usar una ruta absoluta
introduciendo todo el camino hacia el elemento que queramos.
/nodo_padre/nodo_hijo/nodo_deseado
Ruta relativa
Cuando nos encontremos dentro de una ruta podemos usar la ruta relativa a nuestra
posición actual dentro del xml.
./nodo_deseado
Varias rutas
Si queremos usar dos rutas posibles las juntaremos con “|”.
/nodo_padre/nodo_hijo/nodo_deseado | /nodo_padre/nodo_deseado
Ejes
Donde apunta
Eje
child::
Al contenido actual. No se usa.
descendant:: A cualquier descendiente dentro
self::
de ese nodo. Abrv= //
Al nodo actual. Abrv= .
attribute::
parent::
Atributo del nodo. Abrv= @
Padre del nodo actual. Abvr= ..
ancestor::
Todos sus antecesores.
Ejemplo
/child:: = /nodo
//dato_deseado =
/nodo_padre/nodo_deseado
./nodo_hijo =
nodo_padre/nodo_hijo
nodo@atributo_nodo
../nodo_hijo =
/nodo_padre/nodo_hijo
ancestor::nodo_hijo =
/nodo_abuelo/nodo_padre/
nodo_hijo
following-
sibling::
following::
Selecciona a los nodos hermanos following-sibling::nodo
Selecciona los nodos a partir del
nodo marcado hacia abajo.
/nodo_padre/nodo/following::*
3
preceding::
*-or-self::
Al contrario de following::
Acompañando al eje principal
con self obtenemos el eje
principal y el propio nodo.
/nodo_padre/nodo/proceding::*
ancestos-or-self::nodo_hijo
Nodos de comprobación
Nodo
*
text()
node()
Que selecciona
Selecciona teniendo en cuenta el nivel
del nodo.
También para seleccionar todos los nodos
hijos del nivel deseado.
El contenido del nodo seleccionado en
formato texto.
Todos los nodos de cualquier tipo.
Ejemplo
/*/*/nodo_deseado =
/nodo_padre/nodo_hijo/nodo
/*/*/* =
/nodo_padre/nodo_hijo/*
/nodo_padre/nodo_deaseado/
text()
Predicados
Por contenido
Nos extraerá los nodos que seleccionemos a partir de su contenido que sean hijos
del del mismo.
/nodo_padre/nodo_hijo[nodo_deseado=”Contenido_elegido”]
Por atributo
Esto mismo también sirve para seleccionar los nodos hijos del nodo con el atributo
que queramos.
/nodo_padre/nodo_hijo[nodo_deseado@Contenido_elegido]
Varios predicados
Se pueden añadir varios predicados para que se cumplan los dos dentro del mismo
elemento padre, se cumplirá como una condición lógica AND.
/nodo_padre/nodo_hijo[nodo_deseado=”Contenido_elegido”]
[nodo_deseado2=”Contenido_elegido2”]
4
Expresiones y operadores
Tipo
Numérico
Comparación =
!=
<,>,>=,<=
or
and
not
Booleano
Funciones
Funciones de nodo
Operador Función
+
-
*
div
mod
Suma
Resta
Multiplicación
División
Resto
Igualdad
Desigualdad
Comparaciones
Lógico or
Lógico and
Lógico not
Ejemplo
/nodo/nodo[numero+5]
/*/nodo[numero1]-[numero2]
/nodo[@numero*5]
/nodo/nodo[@numero Div 5]
/nodo/*[@numero mod]
/*/*/nodo[num=1000]
../nodo[num!=1000]
//nodo[num<= 1000 or num2 >= 0]
./nodo[num<= 1000 or num2 >= 0]
/nodo[num<= 10 and num2 >= 0]
Función
last()
count()
position()
Descripción
Devuelve el úlimo nodo y su contenido.
Cuenta la cantidad del nodo/atributo deseado.
Devuelve la posición del nodo. El nodo raiz
empieza en la posición 1.
Devuelve el contenido del nodo.
text()
local-name() Devuelve el nombre local en modo texto del
nodo actual, el nombre de : hacia la derecha.
Devuelve el nombre completo del nodo.
Devuelve el nombre del archivo xsl.
name()
name-space-
uri()
Ejemplo
*/nodo[last()]
count(*/nodo)
//nodo[position()]
/*/*/nodo/text()
.local-name()
/nodo[name()]
Name-space-uri()
5
Funciones de cadenas
Función
string()
string-length()
Descripción
Convierte un objeto en una cadena.
Devuelve el número de la cadena
concat()
contains()
Concatena lo que desees
Devuelve un “true” si la primera cadena
contiene a la segunda.
normalice-space() Quita los espacios, tabulaciones y saltos
starts-with()
substring()
string-after()
de linea y deja un solo espacio entre
cadenas.
Devuelve un “true” si la primera cadena
empieza con la segunda.
Devuelve el trozo de cadena del nodo
especificado en el primer parámetro, el
segundo parámetro es donde empieza a
buscar en la cadena y el tercer parámetro
la longitud de caracteres a coger.
Devuelve el trozo de cadena contigua al
trozo de cadena que le digamos
string-before()
Al contrario de string-after()
Funciones de booleanas
Ejemplo
/*/string(.)
//nodo/string-
length(name()>6)
concat(name(),../name())
contains(.name(),'nodo')
./normalice-space()
/nodo_padre/starts-
with(nodo_hijo,'nod')
substring(“12345”,2,3)
Resultado: 234
substring-after("04/01","/")
Resultado: 01
string-before(“04/01”,”/”)
resultado:04
Función
boolean()
false()
lang()
not()
true()
Descripción
Convierte un objeto en un valor
booleano..
Devuelve el valor “false”
Devuelve un valor “true” si el argumento
introduce coincide con el contenido o
nodo.
Devuelve un valor falso si el resultado es
verdadero
Devuelve el valor true.
Ejemplo
boolean(.)
false()
./nodo[@lang=”atributo1”]
./nodo[not(contenido=0)]
true()
6
Códigos de ejemplo
Rutas
Código de XML
Código de XPATH:
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
/AAA/DDD/BBB
Código de XPATH:
//BBB
Código de XPATH:
*/BBB
Código de XPATH:
*/*/BBB
Código de XPATH:
/AAA/DDD/*
Resultado:
<BBB/>
Resultado:
<BBB/>
Combinar caminos
Código de XML
Código de XPATH:
//CCC | //BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Resultado:
<BBB/>
Resultado:
<BBB/>
<BBB/>
<BBB/>
<BBB/>
Resultado:
<BBB/>
<BBB/>
<BBB/>
Resultado:
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<BBB/>
<CCC/>
7
Atributos
Código de XML
Código de XPATH:
<AAA>
<BBB id=”1”/>
<CCC/>
<BBB id=”2”/>
<BBB atrib=”3”/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
//@id
Código de XPATH:
//BBB[@id]
Código de XPATH:
//BBB[@*]
Código de XPATH:
//BBB[@id='1']
Resultado:
<BBB/>
Resultado:
1
2
Resultado:
<BBB id=”1”/>
<BBB id=”2”/>
Resultado:
<BBB id=”b1”/>
<BBB id=”b2”/>
<BBB name=”3”/>
Ejes
Código de XML
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Código de XPATH:
Resultado:
//DDD/parent::*
<AAA>
Código de XPATH:
//BBB/ancestor::*
Código de XPATH:
Resultado:
<AAA>
<DDD>
/AAA/BBB/following-sibling::*
Código de XPATH:
Resultado:
/AAA/DDD/preceding::*
Código de XPATH:
/AAA/DDD/preceding-or-self::*
<BBB/>
<CCC/>
<BBB/>
<BBB/>
Resultado:
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD/>
Resultado:
<CCC/>
<DDD/>
<CCC/>
8
Funciones
Código de XML
<AAA>
<BBB/>
<CCC/>
<BBB>
<EEE/>
<EEEE/>
<EEE/>
<BBB/>
<DDD>
<BBB/>
<BBB/>
</DDD>
<CCC/>
</AAA>
Código de XPATH:
/AAA/BBB[1]
Código de XPATH:
/AAA/BBB[last()]
Código de XPATH:
//*[count(BBB)=2]
Código de XPATH:
//*[count(*)=3]
Resultado:
<BBB/>
Resultado:
<BBB/>
Resultado:
<DDD>
Resultado:
<BBB>
Código de XPATH:
Resultado:
//*[name()='DDD']
<DDD>
Código de XPATH:
//*[starts-with(name(),'D')]
Resultado:
<DDD>
Código de XPATH:
//*[string-length(name()) = 4]
Código de XPATH:
//BBB[position() mod 2 = 0 ]
Resultado:
<EEEE>
Resultado:
<BBB/>
9
Referencias
Código gratis
http://www.codigogratis.com.ar/lista-de-funciones-xpath-para-usar-en-xsl/
Msdn Microsoft
http://msdn.microsoft.com/es-es/library/ms256138%28v=vs.80%29
Caucho
http://www.caucho.com/resin-3.0/xml/xpath-fun.xtp#last
10
11
Al igual que el mapa en el bolsillo, la cantimplora en el
cinturón y el machete cruzado en la espalda son esenciales
para la vida de un guerrillero estos manuales facilitan la lucha
constante contra los trabajos de programación.
Los informáticos tenemos la suerte de tener internet cerca de
nosotros, pero cuando esa suerte no existe entonces tenemos
que recurrir al papel o pdf. Estos pequeños manuales no
atienden a explicaciones para principiantes ni avanzados,
simplemente sacian las consultas de las dudas que pueden
surgir programando en cualquier sitio, en el día a día.
Cuando estas lejos de tu puesto de trabajo, internet no está
ahí o simplemente la red no funciona el guerrillero
informático tiene el manual en el bolsillo, la botella de agua
en la mochila y el portátil cruzado en la espalda.
Autor: Jesús Benages Sales
Contacto:
[email protected]
Comentarios de: Xpath Apuntes de guerrilla (0)
No hay comentarios