0% encontró este documento útil (0 votos)
64 vistas69 páginas

UD7 - TRANSFORMACIÓN DE DOCUMENTOS XML CON XSLT Y XPath

Este documento describe el lenguaje XPath y sus funcionalidades. XPath permite navegar y seleccionar nodos en un documento XML. Se utiliza comúnmente junto con XSLT para transformar documentos XML. El documento explica los diferentes tipos de nodos en XPath, ejes de navegación, expresiones, funciones para cadenas y nodos, y proporciona ejemplos de rutas y funciones XPath.

Cargado por

Ripomela
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
64 vistas69 páginas

UD7 - TRANSFORMACIÓN DE DOCUMENTOS XML CON XSLT Y XPath

Este documento describe el lenguaje XPath y sus funcionalidades. XPath permite navegar y seleccionar nodos en un documento XML. Se utiliza comúnmente junto con XSLT para transformar documentos XML. El documento explica los diferentes tipos de nodos en XPath, ejes de navegación, expresiones, funciones para cadenas y nodos, y proporciona ejemplos de rutas y funciones XPath.

Cargado por

Ripomela
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 69

UD7 - TRANSFORMACIÓN DE

DOCUMENTOS XML CON XSLT Y


XPath

Lenguajes de Marcas y Sistemas de Gestión de


Información
1. 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.

● Es decir, se utiliza para navegar a través de elementos y atributos en un documento XML.

2
1. XPath

● XPath no puede ser utilizado de forma independiente: se utiliza siempre en el contexto de un


lenguaje de acogida, ya sea el lenguaje XSLT, Python, Perl, PHP, C #, JavaScript o algún otro.

● Durante esta unidad lo veremos asociado a XSLT.

XPath: navegación en documentos XML

XSLT: transformación de documentos XML

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:

❏ Raíz del documento (uno por documento): contiene todo el documento y se


representa por el símbolo /. No tiene nodo padre y tiene al menos un nodo hijo, el elemento raíz.
*No confundir la raíz del documento con el elemento raíz

❏ Elemento: todo elemento de un documento XML es un nodo de XPath

❏ Atributo: todo atributo de un documento XML es un nodo de XPath

❏ Texto: todo contenido textual de un documento XML es un nodo de XPath

❏ 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

Numérico + o sum() Suma /bookstore/book[1]/price+5


● Expresiones sum(/bookstore/book/price)
y operadores - Resta /bookstore/book[1]/price-5

* Multiplicación /bookstore/book[1]/price*2

div División /bookstore/book[1]/price div 2

mod Resto /bookstore/book[1]/price mod 2

Comparación = Igualdad /bookstore/book[year=”2005”]

!= Desigualdad /bookstore/book[year!=”2005”]

<,>,>=,<= Comparacione /bookstore/book[year>2004]


s

Booleano or Lógico or /bookstore/book[year=”2005” or


year=”2003”]

and Lógico and /bookstore/book[year="2005" and


price>= 30]

*Importante: Cuando uses los operadores de comparación con XSLT: < será &lt; (te obligará a ponerlo así, sino te dará error)
<= será &lt;= (te obligará a ponerlo así, sino te dará error)
16 > será &gt;
>= será &gt;=
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

/bookstore/book[year=”2005” and title=”Harry Potter”]

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

Función Descripción Ejemplo

last() Devuelve el último nodo y su contenido /bookstore/book[last()]

count() Cuenta la cantidad del nodo/atributo count(/bookstore/book)


deseado

position() Devuelve la posición del nodo. El nodo raíz /bookstore/book[position()=2]


empieza en la posición 1

text() Devuelve el contenido del nodo. /bookstore/book/price/text()

name() Devuelve el nombre completo del nodo. /*/*/*[name()=”year”]

18
1. XPath
● Funciones de cadenas

Función Descripción Ejemplo

string-length() Devuelve la longitud de la cadena string-length(/bookstore/book[1]/au


thor)

concat() Concatena lo que desees concat(/bookstore/book[1]/author,


/bookstore/book[1]/price)

contains() Devuelve un “true” si la primera contains(/bookstore/book[1]/author


cadena contiene a la segunda ,”Erik”)

starts-with() Devuelve un “true” si la primera /bookstore/book[starts-with(author,


cadena empieza con la segunda ”Er”)]

19
1. XPath
● Funciones de cadenas

Función Descripción Ejemplo

substring() Devuelve el trozo de cadena del nodo substring(“clara”,2,3)


especificado en el primer parámetro,
el segundo parámetro es donde Resultado: lar
empieza a buscar en la cadena y el
tercer parámetro la longitud de
caracteres a coger.

substring-after() Devuelve el trozo de cadena contigua substring-after(“04/01”,”/”)


al trozo de cadena que le digamos
Resultado: 01

substring-before() Al contrario de string-after() substring-before(“04/01”,”/”)

Resultado: 04

normalize-space() Quita los espacios, tabulaciones y normalize-space("hola clase")


saltos de línea y deja un sólo espacio
entre cadenas. Resultado: hola clase
20
1. XPath
● Funciones

21
1. XPath
Ejemplos de funciones:

//*[count(author)=5]

/bookstore/book[3]/author[last()]

/bookstore/book[position() mod 2 = 0]/title

/bookstore/book/*[name() = "price"]

//*[name()="year"]

/bookstore/book[author = "James Linn"]

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
22
1. XPath
Ejemplos de funciones:

/bookstore/book[starts-with(author,"Giada")]

/bookstore/book/*[string-length(name())="4"]

concat(/bookstore/book[2]/title, " ",


/bookstore/book[2]/author)

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

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

● XSLT (siglas de Extensible Stylesheet Language Transformations) permite transformar


documentos XML en otro tipo de documentos (otro XML diferente, documento HTML,
documento de texto, etc)

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:

❏ Mediante un procesador (xsltproc, XMLStarlet, Xalan, Saxon,…).

❏ Invocando a la biblioteca de transformación desde un programa en C#, Java, etc.…


(utilizando librerías DOM o SAX).

❏ 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:

<?xml-stylesheet type="text/xsl" href="nombre_hoja.xsl"?>

❏ Utilizando editores XML que incorporen transformaciones XSL, como XML Copy Editor.

❏ Utilizando herramientas de Internet. Por ejemplo: http://xsltransform.net/


https://www.freeformatter.com/xsl-transformer.html
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
28
(para html solo)
2. XSLT

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.

<?xml version="1.0" encoding="UTF-8"?>

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).

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



</xsl:stylesheet>

32
3. Elementos XSLT
● <xsl:output method>: especifica el formato de salida, definiendo qué se va a generar como
resultado.

<xsl:output method="html" encoding="UTF-8"/>

- method : xml, html, text…


- encoding: forma de representar caracteres que se adoptará en la salida
- omit-xml-declaration: si su valor es “yes”, no aparecerá la declaración de prólogo de xml en el fichero de salida

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.

Una vez que se encuentra la etiqueta <xsl:apply-templates> se buscará alguna de


las templates definidas en el documento XSL que coincida con la expresión
XPath contenida en su atributo match.

Si añadimos un atributo select al elemento <xsl:apply-templates> se procesará


sólo el elemento secundario que coincide con el valor del atributo. Podemos
usar el atributo select para especificar el orden en que los nodos secundarios
se procesan.

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.

<xsl:element name="singer"> → Nombre que tendrá el elemento

<xsl:value-of select="artist" /> → Valor que tendrá el elemento


</xsl:element>

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.

<xsl:element name="singer"> → Elemento al que le añado un atributo


<xsl:attribute name="from"> → Nombre del atributo
<xsl:value-of select="country"/> → Valor del atributo
</xsl:attribute>
<xsl:value-of select="artist" /> → Valor del elemento al que le añado un atributo
</xsl:element>

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.

<xsl:comment>Contenido del comentario</xsl:comment>

Mejor documenta tus hojas XSLT con los comentarios simples, para que el procesador XSLT
no de problemas:

<!--Contenido del comentario-->

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>

Otras formas para declarar variables de forma condicional:

<xsl:variable name="mi_variable">
<xsl:choose>
<xsl:when test="condicion1">valor1</xsl:when>
<xsl:otherwise>valor2</xsl:otherwise>
</xsl:choose>
</xsl:variable>

La variable vale: <xsl:value-of select="$mi_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.

Os enseño dos ejemplos de aplicación en las dos siguientes páginas.

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.

● En la próxima página, podéis ver un ejemplo de conversión de XML a fichero de texto.

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.

● El elemento <xsl:import> solo se permite como


elemento de nivel superior, es decir, debes situarlo
justo después del xsl:stylesheet y antes de los
xsl:include.

64
3. Elementos XSLT
● <xsl:call-template>: llama a una plantilla con nombre.

<xsl:call-template name="nombre_de_la_plantilla” />

● <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).

<xsl:with-param name="nombre_del_parametro” select=”valor_del_parametro”/>

● <xsl:param>: se utiliza para declarar un parámetro.

<xsl:param name="nombre_del_parametro” />

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().

<xsl:decimal-format name="us" decimal-separator='.' grouping-separator=',' />

<xsl:decimal-format name="european" decimal-separator=',' grouping-separator='.' />

<xsl:value-of select="format-number(price, '#.###,##','european')"/>

<xsl:value-of select="format-number(price, '#,###.##','us')"/>

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

También podría gustarte