Las formas XPath, junto con XSLT y XSL-FO, forman una familia de idiomas llamada XSL. Están diseñados para acceder, transformar y formatear documentos XML.
XPath es un lenguaje para calcular los valores que componen un documento XML (nodos) y su contenido en consecuencia. W3C ha aprobado dos versiones, yo soy el que se usa 1.0:
Específicamente, se asemeja a un árbol genealógico, con los siguientes conceptos: padre, hijo, hermano, antepasado (o anterior), descendiente ...
También es similar a un sistema de archivos: elementos con otros elementos o datos, y directorios con otros directorios o archivos. Usaremos el comando apropiado del sistema operativo para el movimiento hacia adelante y hacia atrás de la estructura de directorios: cd, dir o ls ... Para recuperar el documento XML y extraer la información almacenada en sus elementos, se usará XPath.
El lenguaje de expresión XPath no se utiliza de forma independiente; El lenguaje como XSLT se usa en el contexto de un host. El lenguaje es bastante sofisticado, y habría mucho para ser usado en esta página en profundidad; Así que aquí está la sintaxis del lenguaje y sus funciones básicas.
Aquí puede ver las especificaciones XPath (desarrolladas por W3C):
Lenguaje: http://www.w3.org/TR/xpath20
Modelo-datos: http://www.w3.org/TR/xpath-datamodel
Dirección
Las sentencias XPath, como el direccionamiento de un sistema de archivos, pueden ser absolutas (/ comienzan con) o relativas (nodo contextual según un nodo específico).
XPath trata el documento XML como un árbol de nodos (como DOM).
Estos son los tipos de tipos XPath:
Raiz documento (uno para cada documento): toma el documento completo y / está representado por el símbolo. No tiene un nodo principal y al menos un nodo secundario: nodo de documento. También tiene comentarios e instrucciones de procesamiento, aunque no son parte del documento en sí.
Elemento: Cualquier elemento del documento XML es un nodo XPath.
Atributo: Cualquier atributo de un documento XML es un nodo XPath.
Texto:Todo el contenido de texto de un elemento es un nodo XPath
Comentario.
Instrucciones-procesador.
Sitio-nombres.
Aviso: La instrucción DOCTYPE no cuenta como un nodo.
Estos son los tipos de datos básicos: string, number, boolean y node-set
Expresiones
Estas son las expresiones XPath más comunes:
Para probar las declaraciones XPath, se puede usar lo siguiente:
Un entorno de desarrollo como BaseX; Esto le permitirá al usuario saber qué elemento es el siguiente elemento. Esto se recomienda.
XPath Expression Analyzer en línea; por ejemplo:
Como ejemplo del trabajo, se utilizará un documento sobre la Formación Profesional y los Módulos Vocacionales, llamado ciclos.xml.
EJEMPLOS (ciclos.xml)
<?xml version="1.0" encoding="UTF-8"?>
<elorrieta>
<ciclos>
<ciclo siglas="SMR">
<nombre>Sistemas microinformaticos y redes</nombre>
<rama>Informática y telecomunicaciones</rama>
<duracion unidad="horas">2000</duracion>
<grado>Medio</grado>
<referencia clasificacion="INSN">3</referencia>
</ciclo>
<ciclo siglas="ASIR">
<nombre>Administración de sistemas informáticos y redes</nombre>
<rama>Informática y telecomunicaciones</rama>
<duracion unidad="horas">2000</duracion>
<grado>superior</grado>
<referencia clasificacion="INSN">5b</referencia>
<ects>120</ects>
</ciclo>
<ciclo siglas="DAM">
<nombre>Desarrollo de aplicaciones multiplataforma</nombre>
<rama>Informática y telecomunicaciones</rama>
<duracion unidad="horas">2000</duracion>
<grado>superior</grado>
<referencia clasificacion="INSN">5b</referencia>
<ects>120</ects>
</ciclo>
<ciclo siglas="DAW">
<nombre>Desarrollo de aplicaciones web</nombre>
<rama>Informática y telecomunicaciones</rama>
<duracion unidad="horas">2000</duracion>
<grado>superior</grado>
<referencia clasificacion="INSN">5b</referencia>
<ects>120</ects>
</ciclo>
</ciclos>
<modulos>
<modulo codigo="0222">
<nombre>Sistemas operativos monopuesto</nombre>
<duracion unidad="horas">80</duracion>
<curso>1</curso>
<ciclos>
<ciclo siglas="SMR" />
</ciclos>
</modulo>
<modulo codigo="0373">
<nombre>Lenguajes de marcas y sistemas de gestión de la información</nombre>
<duracion unidad="horas">70</duracion>
<ects>7</ects>
<curso>1</curso>
<ciclos>
<ciclo siglas="ASIR"/>
<ciclo siglas="DAM"/>
<ciclo siglas="DAW"/>
</ciclos>
</modulo>
</modulos>
</elorrieta>
Acceder a elementos / atributos en lugar de acceder a su contenido de texto
Cuando ingresa una ruta XPath como /persona/nombre para un elemento en particular, la que se devuelve es un conjunto de nodos llamado nombre; Este conjunto de nodos consiste en descendientes de personas que pertenecen al nodo raíz. Si esta ubicación no existiera, el conjunto estaría vacío.
Algunos analistas de expresiones traducen directamente el contenido de nodos o nodos a los que se accede.
Si hay alguna duda y el analizador quiere ser un contenido de texto, la función text () se usará detrás de la expresión del nodo, de la siguiente manera:
/persona/nombre/text()
Para acceder al atributo de una persona, se escribirá lo siguiente: / persona / @ dni. Si desea acceder a su valor, se usará la función de fecha () (no funciona en algunos analizadores), de la siguiente manera:
/persona/@dni/data()
La función XPath 2.0 string () se usa en ambos casos, de la siguiente manera:
/persona/nombre/string()
/persona//@dni/string()
Acceder a rutas simples
Son equivalentes a las rutas que indicaríamos en una dirección absoluta en un sistema Linux; Es decir, desde la raíz y el elemento que queremos obtener información. La peculiaridad de los sistemas de archivos es que un nodo puede tener varios hijos con el mismo nombre; En el sistema de archivos, no pueden existir dos directorios secundarios con el mismo nombre y el mismo directorio principal.
Ejemplos:
Elementos del lenguaje
De ahora en adelante, los elementos de XPath (comunes en todos los lenguajes de programación) deben ser considerados, ya que se requerirán para crear declaraciones más complejas. En particular, los agentes y funciones.
Operadores
Operadores booleanos
Operadores arimeticos
Otros operadores
Operado
|
Significado
Unir resultados
Ejemplo
/elorrieta//(ciclo | modulo)/nombre
Funciones
Ejemplo:
Obtiene los ciclos que empiezan por D
/elorrieta/ciclos/ciclo[starts-with(@siglas, 'D')]/nombre
Elementos cuyas funciones dependen de sus posiciones
Ejemplo:
Todos los datos del segundo ciclo
/elorrieta/ciclos/ciclo[position()=2]
…y también:
/elorrieta/ciclos/ciclo[2]
Todos los datos del ultimo modulo:
/elorrieta/modulos/modulo[last()]
Ejemplo:
Nombre del nodo actual, ciclo.
/elorrieta/ciclos/ciclo/name()
Todos los comentarios del documento:
//comment()
Todas las instrucciones de proceso del documento
//processing-instruction()
Todos los nodos que tenga una longitud de 4 en el nombre
//*[string-length(name())=4]
Ejemplo:
Los dos nombres de los dos ciclos
/elorrieta/modulos/modulo/ciclos[count(ciclo)=3]/../nombre
Accediendo a elementos con filtros de valores literales
Es una extensión de los enunciados anteriores, por la cual los elementos pueden ser seleccionados de acuerdo con sus atributos o los elementos mismos. En ese caso, los valores serán literales. Como hemos visto en los ejemplos anteriores, las condiciones se indican entre los ganchos directos, junto al elemento que se les aplica. Los saldos literales se indican entre comillas.
Ejemplo:
Módulos con el codigo 0373
/elorrieta/modulos/modulo[@codigo="0373"]
o bien, literalmente, si quieres tratarlo como un número.
/elorrieta/modulos/modulo[@codigo=number("0373")]
Nombre del ciclo medio
/elorrieta/ciclos/ciclo[grado="Medio"]/nombre
Duración del ciclo de DAW
/elorrieta/modulos/modulo/ciclos/ciclo[@siglas="DAW"]/../../duracion
Nombre de los ciclos con reconocimiento de créditos ECTS:
/elorrieta/ciclos/ciclo/ects/../nombre
o de otra manera
/elorrieta/ciclos/ciclo[ects]/nombre
Hay varias condiciones que se pueden combinar:
Nombre de los ciclos con siglas ASIR o SMR :
/elorrieta/ciclos/ciclo[@siglas="ASIR" or @siglas="SMR"]/nombre
En el orden del alfabeto, los nombres de los ciclos con el acrónimo ASIR y SMR
/elorrieta/ciclos/ciclo[@siglas>"ASIR" and @siglas<"SMR"]/nombre *****
En el orden del alfabeto, los nombres de los ciclos con el acrónimo ASIR y SMR
/elorrieta/modulos/modulo[curso="1"][2]
Ciclo de créditos ECTS de tercer ciclo:
/elorrieta/ciclos/ciclo[ects][3]
Datos del módulo de 3 a 5 módulos (solo para XPath 2.0):
/elorrieta/modulos/modulo[3 to 5]
Relación de duración y creditos (ects) Nombre de los módulos con un valor superior a 10:
/elorrieta/modulos/modulo[duracion = ects * 10]/nombre
Obtención de elementos con filtros de valores recuperados
Es lo mismo que en el caso anterior, pero con otras recuperaciones con otras expresiones.
Ejemplos:
Ciclos con módulos que duran más de 80 horas o más:
Primero, los elementos del módulo se seleccionan por más de 80 horas o más, y se obtienen los ciclos con estos módulos.
/elorrieta/modulos/modulo[duracion>=80]/ciclos/ciclo/@siglas
En segundo lugar, se muestran los nombres de los ciclos con los mismos iguales que en el primer paso.
/elorrieta/ciclos/ciclo[@siglas=/elorrieta/modulos/modulo[duracion>=80]/ciclos/ciclo/@siglas]
El nombre de los módulos que duran más que los Sistemas Operativos. La función de número () se usa para obtener el valor numérico de la duración; Si esto no se hace, haría la comparación como una cadena (se cumple "100" <"20"):
/elorrieta/modulos/modulo[number(duracion)>/elorrieta/modulos/modulo[nombre="Sistemas Operativos "]/number(duracion)]/nombre
Accediendo a los elementos a través de los ejes
Los ejes XPath son expresiones que admiten árboles XML, que se basa en la fraternidad de los nodos.
Adibideak:
Los jóvenes hermanos y hermanas en el segundo módulo:
/elorrieta/modulos/modulo[2]/following-sibling::*
Elementos raíz posteriores de la firma:
/elorrieta/descendant::nombre o /elorrieta//nombre
XPath 2.0
La novedad más destacada es que el tipo de datos del esquema XML está definido por sí mismo: xs: string, xs: boolean, xs: date ...
También tiene algunas características nuevas; por ejemplo, minúsculas () y mayúsculas (). Estas funciones se usan para traducir caracteres de texto a minúsculas y letras, respectivamente.