Anda di halaman 1dari 9

XSLT Introducción

XSL(EXtensible Stylesheet Language) es un lenguaje de estilos para XML.

XSLT se refiere a Transformaciones XSL.

Este documento muestra como usar XSLT para transformar documentos XML a otros formatos (como transformar XML en HTML).

Editor XSLT online


Con el editor online accesible mediante los enlaces de este documento, es posible editar código XML y XSLT, y pulsar en el botón correspondiente para
ver el resultado.

Ejemplo XSLT
<?xml version="1.0"?>

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

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</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>

Inténtalo tú mismo »

Qué se debe conocer


Antes de continuar, es deseable tener un conocimiento básico de los siguientes lenguajes:

 HTML

 XML

Lenguajes XSL(T)
XSLT es un lenguaje para transformar documentos XML.

XPath es un lenguaje para navegar en documentos XML.

XSL
XSL viene de EXtensible Stylesheet Language.

El World Wide Web Consortium (W3C) empezó a desarrollar XSL debido a la necesidad de un lenguaje de estilos basado en XML.

CSS = Hojas de estilo para HTML


HTML usa etiquetas predefinidas, cuyo significado y efecto en la visualización de cada etiqueta es conocido.
CSS se utiliza para añadir estilos a documentos HTML.

XSL = Hojas de estilo para XML


XML no utiliza etiquetas predeterminadas, y por tanto el significado de cada etiqueta no está predeterminado.

Por ejemplo, un elemento <table>, podría indicar una tabla HTML, representar un mueble, o cualquier significado que se le quiera otorgar en XML,

sin que los navegadores conozcan a priori como mostrarlo. XSL describe como los elementos XML deben mostrarse.

XSL - Más que un lenguaje de hojas de estilo.


XSL consta a su vez de las siguientes tecnologías:

 XSLT - Lenguaje para transformar documentos XML.

 XPath - Lenguaje para navegar en documentos XML.

 XSL-FO - Lenguaje para formatear documentos XML.

Qué es XSLT?

 XSLT quiere decir XSL Transformations.

 XSLT es la parte más importante de XSL.

 XSLT transforma un documento XML document en otro documento XML.

 XSLT utiliza XPath para navegar en los documentos XML.

 XSLT es una recomendación del W3C.

XSLT = Transformaciones XSL


XSLT es la parte más importante de XSL.

XSLT se utiliza para transformar un documento XML en otro documento XML, u otro tipo de documento reconocido por un navegador, como XHTML o
HTML. Normalmente XSLT realiza transformaciones de cada elemento XML en un elemento (X)HTML.

Con XSLT, se pueden añadir o borrar elementos y atributos dando como resultado un nuevo fichero de salida. También pueden reorganizarse y
ordenarse elementos, evaluar condiciones y tomar decisiones de procesamiento acerca de que elementos ocultar y mostrar.

Una manera habitual de describir una transformación XSLT es decir que una transformación XSLT transforma un árbol fuente XML en un árbol
resultado XML.

XSLT Uses XPath


XSLT utiliza XPath para encontrar información en un documento XML. XPath se utiliza para navegar a través de elementos y atributos en documentos
XML.

Cómo funciona?
Durante el proceso de transformación, XSLT utiliza XPath para definir partes del documento fuente que deben coincidir con una o más de las plantillas
que se hayan predefinido. Cuando se encuentra una coincidencia, XSL transforma la parte coincidente del documento fuente en su resultado en el
documento resultante de la transformación.

Soporte de XSLT en los navegadores.


Todos los navegadores más importantes soportan XSLT y XPath.

XSLT es una recomendación del W3C.


XSLT se convirtió en una recomendación del W3C el 16 de Noviembre de 1999.

Caso de estudio: ¿ Cómo transformar XML en XHTML utilizando XSLT?

Declaración correcta de la hoja de estilo XSL.


El elemento raíz que declara que un documento es una hoja de estilos XSL es <xsl:stylesheet> o <xsl:transform>.

Nota: <xsl:stylesheet> y <xsl:transform> son sinónimos y puede utilizarse cualquiera de los dos.

La manera correcta de declarar una hoja de estilos de acuerdo a la recomendación XSLT del W3C es la siguiente:

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

o bien:

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

Para acceder a los elementos XSLT, atributos y funcionalidades se debe declarar el namespace de XSLT al principio del documento.

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" apunta al namespace oficial XSLT del W3C. Si se utiliza este namespace, también debe
incluirse el atributo version="1.0".

Empezar con un Documento XML "puro"

Se desea transformar el siguiente documento XML ("cdcatalog.xml") en XHTML:

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


<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>

Ver "cdcatalog.xml"

Crear una hoja de estilo XSL

A continuación, se crea una hoja de estilo XSL (XSL Style Sheet) llamada "cdcatalog.xsl" con una plantilla de transformación:

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

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

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</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>
Ver "cdcatalog.xsl"

Enlazar la XSL Style Sheet con el documento XML


Para ello, se añade la referencia a la hoja de estilo XSL al documento XML, como instrucción de procesamiento a continuación del prólogo XML:

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


<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>

Un navegador compatible con XSLT transformará el contenido del documento XML en XHTML.

Ver el resultado

Elemento XSLT <xsl:template>


Una hoja de estilo XSL consiste en uno o más conjuntos de reglas denominados plantillas.

Una plantilla contiene reglas a aplicar cuando se encuentra un nodo en particular durante la transformación.

El elemento <xsl:template> se utiliza para construir plantillas.

El atributo match se utiliza para asociar una plantilla con un elemento XML. El atributo match también puede ser utilizado para definir una plantilla
para el documento XML completo. El valor del atributo match es una expresión XPath.(así, match="/" define el documento XML completo)

A continuación se muestra una versión simplificada del archivo XSL anterior:

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

Inténtalo tú mismo»

Explicación del Ejemplo


Ya que una hoja de estilo XSL es un documento XML, siempre empieza con la declaración: <?xml version="1.0" encoding="UTF-8"?>.

El siguiente elemnto, <xsl:stylesheet>, define que el cocumento es una XSLT style sheet (junto al número de versión y el atributo de namespace
XSLT)

El elemento <xsl:template> define una plantilla. El atributo match="/" asocia la plantilla con la raíz del documento XML fuente.
El contenido dentro del elemento <xsl:template> define HTML a escribir en la salida.

Las dos últimas líneas definen el final de la plantilla y el final de la hoja de estilo.

El resultado de este ejemplo es que no se copian datos desde el documento XML fuente a la salida. A continuación se expone cómo utilizar el

elemento <xsl:value-of> para seleccionar valores de los elementos XML.

Elemento XSLT <xsl:value-of>


El elemento <xsl:value-of> se utiliza para extraer el valor de un nodo seleccionado, y puede utilizarse para añadir los valores extraídos a
la salida o resultado de la transformación.

Example
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

Try it Yourself »

Explicación del Ejemplo


Nota: El atributo select, en el ejemplo anterior, contiene una expresión XPath, que indica sobre que elementos se extraerán y mostrarán los resultados
en la salida.

El resultado del ejemplo anterior es que una única línea de datos es copiada desde el documento XML a la salida.

A cotinuación se explica cómo utilizar el elemento <xsl:for-each> para iterar a través de los elementos XML, y mostrar todos los registros.

XSLT <xsl:for-each> Element


El elemento <xsl:for-each> permite realizar iteraciones en XSLT.

El elemento <xsl:for-each> puede ser utilizado para seleccionar todo elemento XML de un conjunto de nodos especificado.

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</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>

Inténtalo tú mismo»

Filtrando la salida
Podemos también filtrar la salida de una transformación añadiendo un criterio(predicado XPath) al atributo select del elemento <xsl:for-each>

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Los operadores de filtrado permitidos son:

 = (igual)

 != (distinto)

 &lt; menor que

 &gt; mayor que

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
<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>

Inténtalo tú mismo »

Elemento XSLT <xsl:sort>


El elemento <xsl:sort> es utilizado para ordenar la salida.

Para ordenar la salida, simplemente se añade un elemento vacío <xsl:sort> dentro del elemento <xsl:for-each> en el archivo XSL.

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<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>

Inténtalo tú mismo»

Nota: El atributo select indica sobre que elemento XML se realizará la ordenación.

Elemento XSLT <xsl:if>


El elemento <xsl:if> se utiliza para evaluar una condición contra el contenido de un documento XML.

Sintaxis
<xsl:if test="expression">
...Alguna expresión si la condición es verdadera...
</xsl:if>

Dónde utilizar el elemento <xsl:if>


Para añadir una condición, se debe añadir el elemento <xsl:if> dentro del elemento <xsl:for-each> en el archivo XSL:

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
<th>Price</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:if test="price &gt; 10">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="price"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

Inténtalo tú mismo »

Nota: El valor del atributo obligatorio test contiene la expresión(condición) a ser evaluada.

El código anterior sólo mostrará en la salida los elementos título y artista de los CDs con un precio mayor que 10.

Elemento XSLT <xsl:choose>


El elemento <xsl:choose> es utilizado en conjunción con los elementos <xsl:when> y <xsl:otherwise> para expresar múltiples
condiciones.
Sintaxis
<xsl:choose>
<xsl:when test="expression">
... alguna salida ...
</xsl:when>
<xsl:otherwise>
... alguna salida ....
</xsl:otherwise>
</xsl:choose>

Cuándo utilizar la condición Choose:

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

Intentálo tú mismo »

El código anterior añadirá un color de fondo rosa a la columna artista CUANDO(WHEN) el precio del CD sea mayor que 10.

Otro Ejemplo:
Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price &gt; 9">
<td bgcolor="#cccccc">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

Intentálo tu mismo»

El código anterior añadirá un color de fondo a la columna "Artist" CUANDO(WHEN) el precio del CD es mayor de 10, y un color de fondo gris cuando el
precio del CD es mayor a 9 y menor o igual a 10.

Elemento XSLT <xsl:apply-templates>


El elemento <xsl:apply-templates> aplica una plantilla al elemento indicado o a sus hijos. nodes.

Si añadimos un atributo select al elemento <xsl:apply-templates> procesará sólo los elementos hijo que coincidan con el valor del atributo. Podemos
usar el atributo select para especificar el orden en que los hijos serán procesados.

Example
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

</xsl:stylesheet>

Inténtalo tú mismo »