XPath
De eedomus - Documentación
Expresiones
Considerando el siguiente documento XML:
<?xml version="1.0"?> <raíz> <enciclopedia nombre="Wikipedia" site="http://es.wikipedia.org/"> <artículo nombre="XPath"> <autores> <autor> <nombre>Rodríguez</nom> </autor> <autor> <nombre>López</nom> </autor> </autores> </artículo> </enciclopedia> </raíz>
Tenemos las siguientes expresiones XPath:
Expresión XPath | Resultado |
---|---|
|
selecciona un nodo "ficticio" llamado root element, que engloba al conjunto del documento, incluido el doctype |
|
selecciona el nodo vacío dado que no hay ningún elemento |
|
selecciona todos los elementos |
|
selecciona el único elemento |
|
selecciona todos los elementos |
Todas estas expresiones XPath son absolutas (empiezan por "/"), lo que significa que devuelven el mismo resultado sea cual sea el contexto.
Las siguientes expresiones son relativas. Si el contexto corriente es el único elemento "enciclopedia"
, obtenemos lo siguiente:
Expresión XPath | Resultado |
---|---|
|
selecciona el elemento |
|
no selecciona nada, dado el contexto |
|
selecciona el segundo autor (López) del primer artículo |
|
selecciona los artículos que tienen como mínimo 2 autores |
|
selecciona el elemento |
Pruebe sus expresiones XPath
Puede validar sus expresiones en esta página de prueba.
XPath Operators
Puede alterar los resultados de los nodos XML con operadores XPath. Éstos son algunos ejemplos:
- Para dividir entre 10 el resultado obtenido:
(/SENSORS/TEMPERATURE/VALUE) div 10
- Para multiplicar por 100 el resultado obtenido:
(/SENSORS/TEMPERATURE/VALUE) * 100
Las siguientes funciones están soportadas:
Para redondear al número entero inferior:
floor(número)
Para redondear al número entero superior:
ceiling(número)
Para redondear al número más cercano:
round(número)
Para contar el número de nodos que devolverá el XPath:
count(xpath)
Para concatenar 2 cadenas de caracteres:
concat(cadena1, cadena2)
Para quedarse sólo con una parte de una cadena de caracteres
substring(cadena, principio, longitud) substring(cadena, principio)
Para conservar sólo los datos situados antes de un caracter determinado:
substring=before(cadena1, cadena2)
Para conservar sólo los datos situados después de un caracter determinado:
substring=after(cadena1, cadena2)
Para obtener la longitud de una cadena:
string-length(cadena)
Para sustituir unos caracteres por otros
translate(cadena1, cadena2, cadena3)
Ejemplo: translate('12:30','30','45') Resultado: '12:45'
Ejemplo: translate('12:30','03','54') Resultado: '12:45'
Ejemplo: translate('12:30','0123','abcd') Resultado: 'bc:da'
La función replace() no está soportada, pero puede usar una función específica change(). Puede llamar a la función una o varias veces al final de una expresión XPath para sustituir una cadena por otra:
change(cadena_original, nueva_cadena)
Algunos ejemplos de uso de funciones:
- Para conservar sólo los datos situados después del '.':
substring-after(/SENSORS/TEMPERATURE/VALUE, '.')
- Para obtener sólo el segundo caracter leído:
substring(/SENSORS/TEMPERATURE/VALUE, 2, 1)
- Para contar el número de nodos XML:
count(/SENSORS/TEMPERATURE)
- Para obtener un nodo esquivando un eventual namespace por defecto:
//*[local-name() = 'VALUE']