UD7 - TRANSFORMACIÓN DE DOCUMENTOS XML CON XSLT Y XPath
UD7 - TRANSFORMACIÓN DE DOCUMENTOS XML CON XSLT Y XPath
● XML Path Language (Xpath) es un lenguaje de descripción de rutas para documentos XML
desarrollado por el W3C.
● Este lenguaje pone a disposición de los usuarios una sintaxis que permite encontrar elementos
concretos en un documento XML.
2
1. XPath
3
1. XPath
● Nodos XPath: Un documento XML es procesado por un analizador (o parser) construyendo un
árbol de nodos.
● Este árbol comienza con un elemento raíz, que se diversifica a lo largo de los elementos que
cuelgan de él y acaba en nodos hoja, que contienen solo texto, comentarios, instrucciones de
procesamiento o incluso que están vacíos y sólo tienen atributos.
4
1. XPath
5
1. XPath
● XPath trata un documento XML como un árbol de nodos. Los tipos de nodos en XPath son:
❏ Comentario
❏ Instrucciones de procesamiento
❏ Espacios de nombres
6
1. XPath
❏ Ejes
7
1. XPath
❏ Ejes
8
1. XPath
● Rutas a utilizar:
9
1. XPath
Ejemplos de rutas:
/bookstore/book/title
/bookstore/book/price
/bookstore/book/@category
/bookstore/book/title/@lang
/bookstore/book/title/text()
//year
XML: https://www.w3schools.com/xml/books.xml
10
1. XPath
11
1. XPath
12
1. XPath
13
1. XPath
● Nodos de comprobación:
14
1. XPath
Ejemplos de rutas:
/*/*/price
/bookstore/book/title/text()
/bookstore/book/node()
XML: https://www.w3schools.com/xml/books.xml
15
1. XPath Tipo Operador Función Ejemplo
* Multiplicación /bookstore/book[1]/price*2
!= Desigualdad /bookstore/book[year!=”2005”]
*Importante: Cuando uses los operadores de comparación con XSLT: < será < (te obligará a ponerlo así, sino te dará error)
<= será <= (te obligará a ponerlo así, sino te dará error)
16 > será >
>= será >=
1. XPath
Ejemplos de rutas:
/bookstore/book[@cover=”paperback”]
/bookstore/book/title[text()="Learning XML"]
/bookstore/book[title="Learning XML"]
/bookstore/book[3]/price*2
Nota*: Cuidado al copiar las dobles comillas, debes volverlas a escribir o te dará error
el XML Copy Editor
17
XML: https://www.w3schools.com/xml/books.xml
1. XPath
● Funciones de nodo
18
1. XPath
● Funciones de cadenas
19
1. XPath
● Funciones de cadenas
Resultado: 04
21
1. XPath
Ejemplos de funciones:
//*[count(author)=5]
/bookstore/book[3]/author[last()]
/bookstore/book/*[name() = "price"]
//*[name()="year"]
XML: https://www.w3schools.com/xml/books.xml
22
1. XPath
Ejemplos de funciones:
/bookstore/book[starts-with(author,"Giada")]
/bookstore/book/*[string-length(name())="4"]
XML: https://www.w3schools.com/xml/books.xml
23
1. XPath
Ejemplos de funciones:
/bookstore/book[contains(author,”Row”)]
/bookstore/book[substring(author,1,3)="Jam"]
/bookstore/book[substring-before(price,".") = "39"]
Nota*: Cuidado al copiar las dobles comillas, debes volverlas a escribir o te dará error
el XML Copy Editor
XML: https://www.w3schools.com/xml/books.xml
24
1. XPath
Ahora practica con los Ejercicios de clase XPath que hay en el Classroom.
25
2. XSLT
26
2. XSLT
● Una hoja XSLT consta de una serie de reglas y es también un documento XML que se guarda
en un fichero con extensión .xsl.
● XSLT utiliza XPath para encontrar información en un documento XML navegando a través de
elementos y atributos.
27
2. XSLT
● Procesadores de hojas de estilos XSLT -> Existen varias formas de realizar la transformación,
entre ellas:
❏ Desde un navegador web. Para ello se debe asociar la hoja de estilo XSLT al
documento XML a transformar añadiendo la siguiente instrucción de procesamiento:
❏ Utilizando editores XML que incorporen transformaciones XSL, como XML Copy Editor.
29
2. XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<html>
<head>
<title>CD Collection</title>
</head>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th> Debes distinguir las distintas partes
<th>Artist</th> que forman un archivo .xsl
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
30
3. Elementos XSLT
● Prólogo: Una hoja de estilos XSLT es un documento XML, por ello es recomendable que
figure al comienzo.
31
3. Elementos XSLT
● <xsl:stylesheet>: declara que el documento es una hoja de estilo XSL. Puede usarse
<xsl:stylesheet> o <xsl:transform> (son sinónimos y puede utilizarse el que se desee).
32
3. Elementos XSLT
● <xsl:output method>: especifica el formato de salida, definiendo qué se va a generar como
resultado.
33
3. Elementos XSLT
● <xsl:template>: Este elemento se utiliza para crear plantillas. El atributo “match” se utiliza
para asociar una plantilla con un elemento XML, es decir, el valor del atributo “match”
establece la rama del árbol XML sobre la que se aplica la plantilla.
También se puede utilizar para definir una plantilla para todo el documento XML. El valor
“match” es una expresión XPath (es decir, match="/" define todo el documento).
El contenido de cada plantilla describe una acción a realizar a partir del nodo que se
está procesando, es decir es lo que genera la transformación.
<xsl:template match="/">
…
</xsl:template>
34
3. Elementos XSLT
● <xsl:for-each>: se utiliza para seleccionar todos los elementos XML de un nodo especificado y
recorrerlos con un bucle.
<xsl:for-each select="catalog/cd">
…
</xsl:for-each>
En este ejemplo, en cada iteración del bucle estaría recorriendo un cd diferente del xml inicial.
35
3. Elementos XSLT
● <xsl:value-of>: se utiliza para extraer el valor del nodo XML seleccionado y añadirlo a la
secuencia de salida de la transformación.
<xsl:value-of select="title"/>
*Atención a la ruta que incluyes en el select, todo depende de en qué nodo estés situado.
36
3. Elementos XSLT
● <xsl:sort>: ordenación. Sirve para indicar el elemento por el que ordenar la salida. Debe de
estar dentro de un bucle <xsl:for-each> o <xsl:apply-templates>.
<xsl:sort select="title"/>
También le puedes añadir el atributo “order” con los valores “ascending” (valor por defecto)
o “descending”:
<xsl:sort select="title" order=”descending”/>
37
3. Elementos XSLT
38
3. Elementos XSLT
● <xsl:if>: condicional simple. Sólo se aplicará su contenido si la condición especificada en el
parámetro “test” es verdadera.
<xsl:if test="price>10">
…
</xsl:if>
<xsl:if test="country='USA'"> —> Fíjate que si usamos cadenas de texto, tenemos que indicarlas con comillas simples
…
</xsl:if>
39
3. Elementos XSLT
40
3. Elementos XSLT
● <xsl:choose>: condicional múltiple. Se utiliza en conjunto con <xsl:when> y <xsl:otherwise>
para expresar múltiples condiciones.
<xsl:choose>
<xsl:when test="price > 10">
…
</xsl:when>
<xsl:when test="price > 9">
…
</xsl:when>
<xsl:otherwise> → Es opcional
…
</xsl:otherwise>
</xsl:choose>
*Ojo. Ten en cuenta que aunque un nodo cumpla varias condiciones sólo entra en la que primero
cumple en orden de arriba a abajo. Es como si fuera una estructura if - else if - else de
programación.
41
3. Elementos XSLT
42
3. Elementos XSLT
● <xsl:apply-templates>: es usada para aplicar una plantilla (template) sobre el elemento
actual o sobre alguno de sus nodos hijos.
43
3. Elementos XSLT
44
3. Elementos XSLT
45
3. Elementos XSLT
● <xsl:text>: se utiliza para escribir texto en la salida.
<xsl:text>Artist: </xsl:text>
46
3. Elementos XSLT
● <xsl:element>: se utiliza para crear un nodo de tipo elemento (etiqueta) en el documento de
salida.
47
3. Elementos XSLT
48
3. Elementos XSLT
● <xsl:attribute>: se utiliza para añadir atributos a elementos que aparecerán en el documento
de salida.
49
3. Elementos XSLT
50
3. Elementos XSLT
● <xsl:comment>: añade un nodo comentario. Permite documentar las especificaciones de
conversión. Aparece también el comentario generado en el fichero de salida.
Mejor documenta tus hojas XSLT con los comentarios simples, para que el procesador XSLT
no de problemas:
51
3. Elementos XSLT
● <xsl:variable>: Se utiliza para declarar una variable local o global. La variable es global, si
está declarada como un elemento de nivel superior y local si se declara dentro de una plantilla.
Una vez que haya establecido el valor de una variable, no se puede cambiar o modificar ese
valor, por tanto, no es realmente una variable sino una constante ya que no existe la
asignación.
Para declararla:
<xsl:variable name="nombre_de_la_variable" select="expresionXPath"/>
Para usarla:
<xsl:value-of select=”$nombre_de_la_variable”/>
52
3. Elementos XSLT
53
3. Elementos XSLT
● <xsl:variable>
<xsl:variable name="mi_variable">
<xsl:choose>
<xsl:when test="condicion1">valor1</xsl:when>
<xsl:otherwise>valor2</xsl:otherwise>
</xsl:choose>
</xsl:variable>
54
3. Elementos XSLT
55
3. Elementos XSLT
● <xsl:copy-of>: Crea una copia del nodo actual (incluidos las etiquetas, los prefijos de
espacios de nombres, los nodos secundarios y los atributos).
Este elemento puede utilizarse para múltiples copias de inserción del mismo nodo en
diferentes lugares en la salida.
56
3. Elementos XSLT
57
3. Elementos XSLT
58
3. Elementos XSLT
● Recuerda que las expresiones que indicas en los atributos select() de los diferentes
elementos XSLT (xsl:value-of, xsl:for-each…) son expresiones XPath. Por lo tanto, podrás usar
todas las funciones que vimos en la parte de XPath, al principio de este tema.
59
3. Elementos XSLT
60
3. Elementos XSLT
● <xsl:include>: Se utiliza para incluir el contenido de otra hoja xsl (xsl:stylesheet).
61
3. Elementos XSLT
62
3. Elementos XSLT
● El elemento xsl:include puede ir en cualquier lugar que desees en una hoja XSL, siempre
que sea un elemento de nivel superior, es decir, un elemento secundario del elemento
xsl:stylesheet que constituye el cuerpo principal de la hoja.
● Las definiciones y plantillas que indicas en la hoja XSL que incluyes con el xsl:include tienen
igual prioridad que las presentes en la hoja XSL inicial (en la que incluyes el xsl:include).
63
3. Elementos XSLT
● También existe el elemento xsl:import. Importar un archivo XSLT es lo mismo que incluirlo
con xsl:include, excepto por un punto: que las definiciones y las reglas de plantilla del archivo
importado tienen menor prioridad que las del archivo XSL donde indicas el xsl:import.
64
3. Elementos XSLT
● <xsl:call-template>: llama a una plantilla con nombre.
● <xsl:with-param>: define el valor de un parámetro que se pasará a una plantilla. El valor del
atributo name de <xsl:with-param> debe coincidir con un nombre en un elemento <xsl:param>
(el elemento <xsl:with-param> se omite si no hay ninguna coincidencia).
65
3. Elementos XSLT
66
3. Elementos XSLT
● <xsl:decimal-format>: define los caracteres y símbolos que se utilizan al convertir números
en cadenas, con la función format-number().
67
3. Elementos XSLT
68
4. Ámbitos de aplicación de XSLT
● En la actualidad, las fuentes de datos XML son algo muy común. Gracias a ellas se pueden
establecer mecanismos simples de intercambio de datos entre distintas plataformas.
● Las hojas XSLT constituyen el mejor vehículo para presentar la información, dando lugar así a
páginas web dinámicas y ligeras. Una fuente de datos XML es un documento que no puede
presentarse por sí mismo, necesita de algo más que se responsabilice de transformar los
datos, puros y duros, en una página web.
● Integraciones entre distintos sistemas, para adaptar el formato del sistema origen (XML) al
formato exacto que requiere el sistema destino para hacer algún proceso. De esta forma,
estos sistemas se podrán integrar y trabajar de forma automática.
69