Está en la página 1de 18

LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

Índice de contenido
1 Transformaciones de documentos XML...........................................................................................2
2 Formas de transformación de documentos XML..............................................................................2
2.1 CSS y XML...............................................................................................................................2
2.2 XSLT..........................................................................................................................................3
2.3 XSL-FO.....................................................................................................................................3
3. Transformación XSLT......................................................................................................................4
4. Primeros pasos con XSLT................................................................................................................5
4.1 Un primer ejemplo de hoja de estilo básica...............................................................................5
4.2 Explicación del código usado....................................................................................................7
5. Profundizando.................................................................................................................................10
6. Elementos XSL...............................................................................................................................13
7. Referencias a elementos XML.......................................................................................................13
9. Otros elementos XSL.....................................................................................................................15
10. Consideraciones de uso................................................................................................................15
Ejercicios............................................................................................................................................16
Anexo. Referencia de elementos XSLT..............................................................................................17

Prof.: Juan Farfán Espuny Pág. 1/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

1 Transformaciones de documentos XML


Como vimos con los documentos HTML y las hojas de estilo en cascada CSS, existe la
posibilidad, sin cambiar los elementos HTML, de visualizar una página web con unos estilos
propios diferentes a los predeterminados haciendo uso de las características CSS. Basta con usar
estilos de alguna de las 3 formas vistas (externa, interna o en línea).

Para documentos XML también podemos definir estilos CSS para “renderizar” el contenido (y
valores de atributos) de los elementos presentes en un navegador como si fuera documento HTML.
Además existe otra opción parecida pero diferente que es la transformación del documento XML a
cualquier otro tipo de documento haciendo uso del estándar XSLT.

XSLT tiene características de lenguaje de programación. Iremos viéndolo poco a poco.

Puedes ver y editar un caso práctico de XSLT en la web de la w3schools.com, en concreto


https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog

2 Formas de transformación de documentos XML


El estándar XSLT forma parte de la trilogía transformadora de XML, compuesta por:

• CSS y XML
• XSLT
• XSL-FO

2.1 CSS y XML


Las CSS (Cascading Style Sheets, hojas de estilo en cascada), permite dar una apariencia en el
navegador determinada a cada una de las etiquetas XML. Un ejemplo es:

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


<?xml-stylesheet href="ejemplo.css" type="text/css" ?>
<libro>
<titulo>La vida está en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion año="1973"/>
</libro>

Si el documento de hojas de estilo ejemplo.css contiene solo esto:

titulo {
color: red;
}

entonces el documento XML anterior se verá así:

La vida está en otra parte Milan Kundera

Prof.: Juan Farfán Espuny Pág. 2/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

AVISO: Si un documento XML enlaza a una hoja de estilo, los navegadores ya no muestran el
documento completo con las etiquetas, sino el contenido aplicando las hojas de estilos.

Ejercicios
E.1 Realiza la transformación XML por CSS del ejemplo anterior y captura una imagen de
los códigos CSS y XML en VSCode y del navegador donde se aprecie el estilo usado.
Recuerda incluir todo el código en la captura y siempre formateado completamente.
E.2 Haz los mismos pasos con un ejemplo más extenso creado con estos documentos de la
web de w3schools.com (en este caso el número de líneas es alto por lo que la captura contendrá solo
las primeras líneas visibles pero completas).
▪ The CD catalog
▪ The CSS file

2.2 XSLT
XSLT viene de Extensible Stylesheet Language Transformations, o lenguaje de transformaciones basado
en hojas de estilo.

Al ser objeto de estudio de este tema lo describiremos y ejemplificaremos en los siguientes


apartados.

2.3 XSL-FO
XSL-FO viene de Formatting Objects, objetos de formateo. Su objetivo es crear transformaciones
para fotocomposición, como puede ser PDF (el formato de Adobe). Un ejemplo es:

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


<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="hola"
page-height="29.7cm"
page-width="21cm"
margin-top="5mm"
margin-bottom="10mm"
margin-left="20mm"
margin-right="20mm">
<fo:region-body margin-top="10mm" margin-bottom="10mm" />
</fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="hola">
<fo:flow>
<fo:block>Hola, mundo</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>

Para realizar la transformación es necesario usar una aplicación específica llamada “procesador de

Prof.: Juan Farfán Espuny Pág. 3/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

XSL-FO”. Los procesadores XSL-FO libres más conocidos son FOP y PassiveTeX.

En este tema no se tratará la transformación por objetos de formateo.

3. Transformación XSLT

Objetivo de XSLT.
XSLT es un lenguaje que se usa para convertir documentos XML en otros documentos XML.
Puede convertir un documento XML que obedezca a un DTD a otro que obedezca otro diferente, un
documento XML bien formado (no válido) a otro que siga un DTD, o, lo más habitual, convertirlo a
"formatos finales", tales como XHTML o vCard.

href a .xsl

origen.xml
origen.xml transformador.xsl (documento
(templates) transformado)

El estilo de programación con las hojas XSLT es totalmente diferente a otros lenguajes (como C++
o Perl), pareciéndose más a "lenguajes" tales como el AWK, o a otros lenguajes funcionales, como
Scheme. Se asemeja al lenguaje visto en el tema anterior XML Schema.

En resumen, programar con las hojas XSLT puede ser un poco frustrante, pero cuando uno aprende
a usarlas, no dejará de usarlas para estos fines. En realidad, son la única alternativa cuando uno
quiere adaptar un contenido descrito con XML a diferentes clientes (por ejemplo, otras aplicaciones,
móviles de diferente tamaño, diferentes navegadores), y la mejor alternativa cuando uno quiere
procesar documentos XML.

Lo que consiguen las hojas de estilo es separar la información (almacenada en un documento


XML) de su presentación, usando en cada caso las transformaciones que sean necesarias para que
el contenido aparezca de la forma más adecuada en el cliente. Es más, se puede usar la misma hoja
de estilo para presentar las múltiples informaciones de una organización empresarial y así tener un
estilo único en la empresa, independiente del contenido de cada documento XML diferente
(documentos de clientes, documentos internos, documentos de proceso de fábrica, proveedores,
documentos fiscales, informes de auditorias, …)

Prof.: Juan Farfán Espuny Pág. 4/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

clientes.xml clientes.xml

internos.xml internos.xml
estilos_empresa.xsl
fabrica.xml fabrica.xml

fiscales.xml clientes.xml
fiscales.xml
fabrica.xml
intenos.xml

En realidad, para editar XML y XSLT no hace falta ningún editor especial, pero viene bien un editor
de XML o incluso un entorno integrado como VSCode que te ayude a indentar o formatear bien el
código, e incluso a cerrar las etiquetas en el orden correcto, o que te muestre la etiqueta y atributos
admisibles en cada momento en función del DTD u otro documento de definición de tipo.

4. Primeros pasos con XSLT

4.1 Un primer ejemplo de hoja de estilo básica


Para empezar, vamos a tratar de presentar una hoja XML de lo más simple, a la que daremos como
nombre de archivo tienda0.xml:

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


<tienda>
<nombre>La tiendecilla</nombre>
<telefono>953 87 12 23</telefono>
</tienda>

Este ejemplo lo iremos extendiendo hasta que contenga un catálogo de una tienda virtual. Por lo
pronto incluimos solamente datos básicos sobre la tienda.

Si abrimos este documento con un navegador web no saldrá directamente el código XML, pues no
es una página web Para transformar este documento XML en una página web tendremos que
incluir una segunda línea con la siguiente información necesaria para realizar la transformación.

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

Esta línea solo difiere de la vista en el anterior apartado 2.1 para transformar con CSS en el valor
del atributo type, que ahora es "text/xsl" y antes "text/css".

Esto significa que cuando un documento XML contenga una línea xml-stylesheet, indicando el
documento .xsl que contiene las plantillas a aplicar en la transformación de hojas de estilo
(stylesheet), bastará con abrir el documento XML con el navegador, que se encargará de realizar la
transformación.

Prof.: Juan Farfán Espuny Pág. 5/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

En el caso de que el archivo indicado en el atributo href no exista o erremos el nombre de este
atributo, lo que hace el navegador es transformar el documento XML a todo el texto contenido
dentro de todos los elementos, es decir todos los contenidos.

Prueba
P.1. Prueba el ejemplo visto en el apartado 2.1 cambiando el valor de href, por ejemplo de la forma:

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


<?xml-stylesheet href="ejemploERROR.css" type="text/css" ?>
<libro>
<titulo>La vida está en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion año="1973"/>
</libro>

Siguiendo con nuestra tienda0 la ampliamos pasando al documento tienda1.xml que queda así:

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


<?xml-stylesheet href="tienda1.xsl" type="text/xsl"?>
<tienda>
<nombre>La tiendecilla</nombre>
<telefono>953 87 12 23</telefono>
</tienda>

Prueba
P.2. Abre el documento tienda1.xml con el contenido mostrado arriba y sin existir el documento .xsl que referencia. ¿Qué
sucede?.

Una vez probado lo anterior en nuestro primer ejemplo, usaremos la siguiente hoja de estilo
contenida en tienda1.xsl:

<?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>
<head><title>Generado con tienda1.xsl</title></head>
<body>
<h1> <xsl:apply-templates /> </h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

A partir de aquí puedes visualizar el contenido del documento tienda1.xml con un navegador
transformándolo con la hoja de estilo tienda1.xsl. El resultado será el siguiente:

La tiendecilla 953 87 12 23

Prof.: Juan Farfán Espuny Pág. 6/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

Este resultado se corresponde al código HTML:

<html>
<head><title>Generado con tienda1.xsl</title></head>
<body>
<h1> La tiendecilla 953 87 12 23 </h1>
</body>
</html>

4.2 Explicación del código usado

Documento .xml

Según vemos en el código del documento XML tienda1.xml, donde aparece en rojo todo lo
relativo a elementos referentes a XML, en color negro los elementos del documento y en color azul
el contenido de esos elementos:

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


<?xml-stylesheet href="tienda1.xsl" type="text/xsl"?>
<tienda>
<nombre>La tiendecilla</nombre>
<telefono>953 87 12 23</telefono>
</tienda>

se aprecia que:
• Contiene un elemento tienda, que incluye otros dos elementos hijos, nombre y telefono,
que contienen el texto que queremos que aparezca en la página web.
• La primera línea simplemente describe que el documento es XML.
• La segunda línea, como se ha dicho antes, asocia la hoja de estilo XSLT de transformación
(tienda1.xsl) al documento. Esta segunda línea la usan los procesadores de XSLT para
tomar el nombre de la hoja de estilo con la que se va a transformar; también la usan los
navegadores.

El XML original, como se ve, es simplemente XML bien formado, no usa un DTD ni lo necesita:
basta con que haya una etiqueta raíz (tienda, en nuestro caso), las etiquetas estén emparejadas
correctamente y los atributos entre comillas. Diferentes documentos XML podrían ser procesados
con la misma hoja de estilo, y darían diferente resultado.

Documento .xsl

Respecto a la primera hoja de estilo con la que nos enfrentamos vemos que es relativamente simple.

Prof.: Juan Farfán Espuny Pág. 7/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

<?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>
<head><title>Generado con tienda1.xsl</title></head>
<body>
<h1> <xsl:apply-templates /> </h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

El "esqueleto" en color azul es un documento HTML normal, al cual tenemos que añadir
"contenido dinámico", es decir, contenido generado a partir del XML original. Para hacernos una
idea una hoja XSLT es como una plantilla sobre la que se cambian los contenidos por sus valores.

Para empezar, se incluyen una serie de instrucciones que modifican el aspecto de la salida.
• La primera declara el documento XML como ya se vió en unidades anteriores.
• La segunda es la etiqueta raíz xsl:stylesheet de la hoja de estilo, que se cierra( en la
última línea; recordemos que una hoja de estilo XSL es también un documento XML y por
tanto tiene que seguir todas sus convenciones. Declara la versión de XSLT que se está
usando y el espacio de nombres (namespace) que vamos a utilizar, es decir, el prefijo que
usarán todas las instrucciones propias de XSLT; en este caso, usamos xsl,

El código está organizado en "templates", que son partes de la hoja que se "disparan" cuando
encuentran una etiqueta que corresponda a lo que hay en su atributo match. El primer y único
template de esta hoja comienza en la línea 3 ( <xsl:template match='/'>), y, en este caso, el
template que corresponde a la etiqueta raíz / contiene el código HTML para generar un esqueleto de
página HTML.

La "orden" <xsl:apply-templates />en la línea 7 cede el control a los otros templates, es decir,
trata de aplicar todos los demás templates que haya en el documento para los hijos del elemento en
el que estamos ahora mismo (match=”/”), incluyendo el resultado de aplicarlos precisamente en ese
punto (es decir, entre las etiquetas h1. En este caso no hay más templates, salvo los llamados los
templates por defecto, que lo único que hacen es incluir el texto del contenido de las etiquetas
en el documento de salida.

En la práctica lo que hemos hecho es decirle dónde tiene que incluir en el esqueleto los valores del
documento original, sin procesarlos más.

La orden <xsl:apply-templates /> podría haberse sustituido, en este caso, por <xsl:value-of
select='tienda' /> y habría tenido exactamente el mismo efecto, es decir, incluir el contenido
de la etiqueta tienda (y todas las que descienden de ella).

Ejercicios
E.3 Crea los 2 documentos que se han definido aquí, transforma el documento XML
y observa el resultado obtenido.

Prof.: Juan Farfán Espuny Pág. 8/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

E.4 Crea otro documento XML pero con otra etiqueta raíz, por ejemplo pelicula, y
observa qué efecto tiene en la salida transformándolo con el mismo .XSL.
E.5 Crear otro documento XML añadiendo varias etiquetas más, con diferentes
niveles de anidación, y aplicar la hoja de estilo, para ver qué efecto tiene.

Otro ejemplo de una transformación es el siguiente. Estudia cada ventana de código.

Prof.: Juan Farfán Espuny Pág. 9/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

5. Profundizando
Vamos a ampliar el documento XML anterior, tratando de procesar diferentes artículos de esta
tienda. La tienda virtual está formada por diferentes productos que a su vez tienen una serie de
características: código de producto, cantidad existente en stock y nombre del producto o artículo. El
documento tienda2.xml es el siguiente:

<?xml version="1.0" encoding='ISO-8859-1'?>


<tienda>
<nombre>La tiendecilla</nombre>
<telefono>953 87 12 23</telefono>
<producto>
<codigo>92</codigo>
<cantidad>10</cantidad>
<articulo>Radio-Casette</articulo>
</producto>
<producto>
<codigo>103</codigo>
<cantidad>50</cantidad>
<articulo>Reloj Cocina</articulo>
</producto>
<producto>
<codigo>1312</codigo>
<cantidad>3</cantidad>
<articulo>Sofa</articulo>
</producto>
</tienda>

Los colores usados son los mismos que en el documento XML anterior.

Cuando añadimos a este documento, llamado tienda2.xml, la 2ª línea del caso anterior para
transformar el documento XML en un documento HTML, y habiendo creado el documento .xsl
correspondiente, obtendremos lo siguiente en el navegador al abrir el .xml:

Vemos que todos los productos existentes en el documento se han convertido en filas de una tabla
(tr, table row) del documento HTML, con cada dato de la tabla (td, table data) incluyendo el
correspondiente dato de cada producto.

Prof.: Juan Farfán Espuny Pág. 10/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

El documento .xsl que ha sido capaz de obtener lo anterior es el siguiente:

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


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match='/'>
<html>
<xsl:apply-templates />
</html>
</xsl:template>

<xsl:template match='tienda'>
<head>
<title><xsl:value-of select='nombre' />(Generado por xsl)</title>
</head>
<body>
<h1><xsl:value-of select='nombre' /></h1>
<h2>Teléfono: <xsl:value-of select='telefono' /></h2>
<h2>Nuestros mejores productos</h2>
<table>
<tr>
<th>Código</th>
<th>Existencias</th>
<th>Artículo</th>
</tr>
<xsl:apply-templates select='producto' />
</table>
</body>
</xsl:template>

<xsl:template match='producto'>
<tr><xsl:apply-templates /></tr>
</xsl:template>

<xsl:template match='codigo|cantidad|articulo'>
<td><xsl:apply-templates /></td>
</xsl:template>

</xsl:stylesheet>

Esta hoja se compone de cuatro templates diferentes (colores gris, celeste, naranja y azul), mientras
que la anterior hoja .xsl tenía solamente uno. Cada template trata elementos de diferente
profundidad dentro del árbol del documento XML: el primer template trataría la raíz, el segundo
las ramas que descienden de él, y el tercer y cuarto ramas progresivamente más bajas. Esto se hace
para realizar acciones distintas para cada elemento distinto de la jerarquía.

Por eso el primer template simplemente incluye el código de apertura y cierre del documento
HTML, y cede el control a los templates asociados al hijo del elemento /, es decir solamente al
template de su único hijo en este caso, que es tienda.

Prof.: Juan Farfán Espuny Pág. 11/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

<xsl:template match='/'>
<html>
<xsl:apply-templates />
</html>
</xsl:template>

El siguiente template trata la etiqueta, tienda, tal como aparece (subrayado) en el atributo match.

<xsl:template match='tienda'>
<head>
<title><xsl:value-of select='nombre' />(Generado por xsl)</title>
</head>
<body>
<h1><xsl:value-of select='nombre' /></h1>
<h2>Teléfono: <xsl:value-of select='telefono' /></h2>
<h2>Nuestros mejores productos</h2>
<table border=”1”>
<tr>
<th>Código</th>
<th>Existencias</th>
<th>Artículo</th>
</tr>
<xsl:apply-templates select='producto' />
</table>
</body>
</xsl:template>

En este template se incluyen dentro del patrón en HTML el contenido del elemento nombre y del
telefono, usando xsl:value-of, que simplemente incluye el contenido del elemento indicado en
select. También se crea el esqueleto de una tabla en HTML, con su cabecera, y cede el control al
siguiente template, que se encargará de cada uno de los producto, para que se procesen sólo las
etiquetas de este tipo que desciendan de tienda, y no las otras (nombre, telefono), que ya están
incluidas antes en la transformación.

Para ello se usa el atributo select: detro de <xsl:apply-templates select='producto'>, que aplicará el
template a todos los elementos producto que existan como hijos del elemento de esta plantilla, es
decir de tienda.

El template de producto crea el esqueleto de una fila, cediendo el control a los templates que
traten con todos los descendientes.

<xsl:template match='producto'>
<tr><xsl:apply-templates /></tr>
</xsl:template>

Hay un sólo template que lo hace y en vez de procesar un sólo tipo de elemento, procesa 3, y para
ello usamos | para indicar que puede procesar cualquiera de ellos, incluyéndolos dentro de un
demarcador de celda de tabla en HTML.

<xsl:template match='codigo|cantidad|articulo'>
<td><xsl:apply-templates /></td>
</xsl:template>

El orden en el que se incluyen los elementos en la salida es el mismo en el que se encuentran en la

Prof.: Juan Farfán Espuny Pág. 12/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

entrada, es lo que se denomina orden de documento. Este orden se puede alterar usando etiquetas
value-of adecuadamente y usando otros métodos, que veremos a continuación

6. Elementos XSL

Hasta ahora hemos visto los siguientes elementos del lenguaje XSL:

• xsl:stylesheet: indica características de el documento .xsl definiendo el el conjunto de


nombres dentro del espacio de nombres (ns, namespace) usado para este lenguaje XSL.
Hemos indicado la versión y el atributo xmlns:xsl con la URL del espacio de nombres. Esto
significa que todos los elementos que tengan el prefijo xsl: están descritos en ese espacio de
nombres.
No confundir con el elemento usado dentro de los documentos XML en su segunda línea
xml-stylesheet que sirve para indicarle cómo se tiene que transformar.

• xsl:template: sirve para definir una plantilla (template) dentro del documento .xsl. Va
acompañado del atributo match para indicar el elemento al que corresponde esa plantilla. Si
varios elementos comparten la misma plantilla se pueden definir todos juntos usando el
separador |. Ver el ejemplo de la plantilla para codigo|cantidad|articulo.

• xsl:apply-templates: se escribe siempre dentro de una plantilla y sirve para procesar en


el lugar que se encuentre xsl:apply-templates todas las plantillas (en plural, como template s)
de los elementos relacionados con el elemento de la plantilla en la que se define. Si no se
incluye ningún atributo en xsl:apply-templates, procesa todas las plantillas de todos los
elementos hijos del elemento al que pertenece la plantilla donde se usa xsl:apply-templates.
Cuando se indica un elemento en el atributo opcional select, se procesan las plantillas de ese
elemento indicado y no de otros elementos hijos del elemento de la plantilla que contiene
xsl:apply-templates.

• xsl:value-of: en este caso solamente se recoge el valor o contenido del elemento


indicado en el atributo select, que es obligatorio.

7. Referencias a elementos XML

La jerarquía de los elementos dentro del documento .xml hay que tenerla en cuenta en las templates.
Si dentro de un template del elemento A queremos acceder al valor de un elemento nieto N de A
tendremos que referenciar a través de su padre P, indicando la ruta. Por ejemplo:

Si el documento .xml contiene: En la template de A la referencia a N se tiene que


<A> hacer así:
<P>
<N>Nieto</N> <xsl:template match=”A”>
</P> <xsl:value-of select=”P/N” />
</A> </xsl:template>

Prof.: Juan Farfán Espuny Pág. 13/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

Aparte de la referencia por nombres de elementos también podemos referenciar a los elementos
usando símbolos genéricos (como en los directorios de los sistemas operativos). Para indicar el
elemento padre se usa “..” mientras para el propio elemento en el que se define la template es “.”

Si el documento .xml contiene: En la template de H con:


<P> <xsl:template match=”H”>
Padre <xsl:value-of select=”..” />
<H>Hijo</H> <xsl:value-of select=”.” />
</P> </xsl:template>
La primera línea recoge “Padre” y la segunda
“Hijo”.

Por otro lado, cuando queremos extraer del documento .xml en lugar del contenido de un elemento
el valor de un atributo lo haremos anteponiendo el carácter @ por delante del nombre del
atributo. Por tanto, cuando encontremos @ en una referencia de una plantilla de un elemento E no
se referirá a un elemento hijo de E sino a un atributo de E.

En el siguiente ejemplo, vemos como en la template se referencia con value-of primero al elemento
de la template (eaiz/elemento) con lo que se obtiene el contenido (“Texto_del_elemento”) y en el
segundo value-of se referencia al atributo llamado “atributo” del elemento “elemento”, cuyo valor
es “Valor_del_atributo”.

Prof.: Juan Farfán Espuny Pág. 14/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

9. Otros elementos XSL

Aparte de los elementos del lenguaje XSL vistos en el apartado 6, existen muchos más. En esta
sección veremos los siguientes:

• xsl:copy-of: muy similar al visto anteriormente xsl:value-of, pero en este caso transforma
el contenido del elemento indicado en la select junto con las etiquetas de inicio y cierre de
ese elemento.
Se puede apreciar esta diferencia en el siguiente ejemplo:

Documento XML Transformación XSL Salida transformada

<xsl:value-of select=”persona” /> Encargado obra


<persona>
Encargado obra
</persona>
<xsl:copy-of select=”persona” /> <persona>Encargado
obra</persona>

En muchos casos no es necesario usar copy-of pero en algunos otros puede ser más eficiente
hacer uso de él. Por ejemplo, observa lo que sucedería en la salida transformada siguiente,
teniendo en cuenta que el documento XML tiene unos elementos con nombres “especiales”
para nuestro propósito:

Documento XML Transformación XSL Salida transformada


<strong> <strong>Encargado
Encargado obra <xsl:copy-of select=”persona” /> obra</strong>
</strong>

• xsl:attribute: sirve para transformar un atributo con nombre indicado en name para el
elemento transformado que contiene este comando. Veámoslo con un ejemplo aclaratorio:

Documento XML Transformación XSL Salida transformada


<libro> <elem>
Quijote <xsl:attribute name=”puesto”> <elem puesto=”Quijote”>
</libro> <xsl:value-of select=”libro” /> Contenido
</xsl:attribute> </elem>
Contenido
</elem>

10. Consideraciones de uso


• Una template se define con xsl:template y solamente puede definirse una vez para cada
elemento match.
• Las templates que se definen en un documento .xsl son las que el autor considere.
• Se pueden definir tantas templates distintas como se desee.
• El uso de templates se realiza con xsl:apply-templates.

Prof.: Juan Farfán Espuny Pág. 15/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

• Se pueden usar las templates todas las veces que se desee. Se pueden colocar todas las
xsl:appluy-templates que se quiera y donde se quiera.
• El uso del atributo select en xsl:apply-templates indica que plantilla se usará en ese lugar. La
cantidad de veces que se usa depende de la cantidad de veces que aparezca el elemento en el
documento .xml
• El atributo select es opcional. Si no se indica, con <xsl:apply-templates />, se aplicarán
plantillas para todos los hijos del elemento del template donde se ubica xsl:apply-templates.
• Cuando no queremos transformar todos los hijos del elemento del template, sino solo
alguno o algunos de ellos, no podremos usar <xsl:apply-templates /> sin select, pues
recogerá todos los hijos. Será necesario usar <xsl:apply-templates select=”hijo” />

Ejercicios

E.6 Para el documento champions.xml (basado en el DTD que aparece en la plataforma),


transformalo mediante XSLT en una tabla HTML, con cada partido en una fila, diferentes
valores (goles del local y del visitante) en columnas, con el nombre de cada equipo en
negrita.

E.7 Para un documento receta.xml basado en el DTD de receta alojado en la plataforma,


crea una transformación recetaAAN.xsl (AAN son las iniciales de tus apellidos y nombre)
que genere una imagen contenida en el archivo que aparezca como texto en el contenido del
elemento FOTO, una lista <ul> para los ingredientes, una línea horizontal y una lista
ordenada <lo> para los pasos.

E.8 A partir del documento factura.xml de la plataforma, crea un documento


facturaAAN.xsl que genere el siguiente modelo, donde en los lugares “..............”
aparecerán los contenidos de esos elementos:

E.9 A partir de autopistas.xml, se pide generar por transformación un documento HTML


con una tabla con las siguientes columnas: nombre de vía, referencia, origen, destino,
carriles, punto kilométrico y sentido. El documento tendrá como nombre autopistasAAN.xsl

Prof.: Juan Farfán Espuny Pág. 16/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

Anexo. Referencia de elementos XSLT

Los elementos XSLT de la Recomendación W3C (XSLT Versión 1.0).

Elementos XSLT

Los enlaces en la columna "Elemento" apuntan a atributos e información más útil sobre cada elemento
específico.

Element Description
apply-imports Applies a template rule from an imported style sheet
Applies a template rule to the current element or to the current element's
apply-templates
child nodes
attribute Adds an attribute
attribute-set Defines a named set of attributes
call-template Calls a named template
Used in conjunction with <when> and <otherwise> to express multiple
choose
conditional tests
comment Creates a comment node in the result tree
copy Creates a copy of the current node (without child nodes and attributes)
copy-of Creates a copy of the current node (with child nodes and attributes)
Defines the characters and symbols to be used when converting numbers
decimal-format
into strings, with the format-number() function
element Creates an element node in the output document
Specifies an alternate code to run if the processor does not support an XSLT
fallback
element
for-each Loops through each node in a specified node set
if Contains a template that will be applied only if a specified condition is true
Imports the contents of one style sheet into another. Note: An imported style
import
sheet has lower precedence than the importing style sheet
Includes the contents of one style sheet into another. Note: An included style
include
sheet has the same precedence as the including style sheet
Declares a named key that can be used in the style sheet with the key()
key
function
message Writes a message to the output (used to report errors)
Replaces a namespace in the style sheet to a different namespace in the
namespace-alias
output
number Determines the integer position of the current node and formats a number
otherwise Specifies a default action for the <choose> element
output Defines the format of the output document
param Declares a local or global parameter
preserve-space Defines the elements for which white space should be preserved
processing-instruction Writes a processing instruction to the output
sort Sorts the output
strip-space Defines the elements for which white space should be removed
stylesheet Defines the root element of a style sheet
template Rules to apply when a specified node is matched

Prof.: Juan Farfán Espuny Pág. 17/18


LENGUAJES DE MARCAS Transformación XSLT IES Luis Vélez de Guevara - Écija

text Writes literal text to the output


transform Defines the root element of a style sheet
value-of Extracts the value of a selected node
variable Declares a local or global variable
when Specifies an action for the <choose> element
with-param Defines the value of a parameter to be passed into a template

Prof.: Juan Farfán Espuny Pág. 18/18

También podría gustarte