Ejemplo 7: Transformación XSLT
Convierte un documento XML en HTML aplicando una hoja de estilo XSLT
🎯 ¿En qué consiste este ejemplo?
XSLT (eXtensible Stylesheet Language Transformations) es un lenguaje que
describe cómo transformar un documento XML en otro formato: HTML, texto plano o incluso
otro XML. Este ejemplo aplica de verdad una hoja de estilo XSLT sobre el listado de libros
usando la extensión XSLTProcessor de PHP, generando una tabla HTML. Puedes
elegir el orden de los resultados, que se controla mediante un parámetro XSLT.
Configura la transformación
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<libro>
<titulo>El Quijote</titulo>
<autor>Miguel de Cervantes</autor>
<anio>1605</anio>
</libro>
<libro>
<titulo>Cien anios de soledad</titulo>
<autor>Gabriel Garcia Marquez</autor>
<anio>1967</anio>
</libro>
<libro>
<titulo>Orgullo y prejuicio</titulo>
<autor>Jane Austen</autor>
<anio>1813</anio>
</libro>
</biblioteca>
HTML resultante (renderizado)
| Título | Autor | Año |
|---|---|---|
| El Quijote | Miguel de Cervantes | 1605 |
| Orgullo y prejuicio | Jane Austen | 1813 |
| Cien anios de soledad | Gabriel Garcia Marquez | 1967 |
📖 Explicación del Código
Código PHP Completo
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xmlBiblioteca);
$xslDoc = new DOMDocument();
$xslDoc->loadXML($xslt);
$procesador = new XSLTProcessor();
$procesador->importStylesheet($xslDoc);
$procesador->setParameter('', 'orden', 'ascending');
echo $procesador->transformToXML($xmlDoc);
?>
📝 xsl:for-each y xsl:value-of
<xsl:value-of select="titulo"/>
</xsl:for-each>
¿Qué hace? Recorre cada <libro> del XML de origen y, por cada uno, extrae el valor de titulo con xsl:value-of, generando una fila de tabla HTML.
📝 Parámetros XSLT
$procesador->setParameter('', 'orden', 'descending');
¿Qué hace? El <xsl:param> declara una variable configurable desde fuera de la hoja XSLT. Desde PHP, setParameter() le asigna un valor antes de transformar, permitiendo cambiar el comportamiento (aquí, el orden) sin tocar el XSLT.
💡 Concepto: separar datos, presentación y lógica
El XML tiene los datos, el XSLT define cómo mostrarlos, y PHP simplemente orquesta la transformación y pasa parámetros. Así puedes cambiar la presentación sin tocar los datos.
🎯 Conceptos Clave Aprendidos
XSLT
- Transforma XML a HTML, texto u otro XML
- Está escrito en sintaxis XML
- Usa plantillas (
xsl:template)
xsl:sort y xsl:for-each
xsl:for-eachitera nodosxsl:sortordena antes de iterardata-type="number"ordena numéricamente
XSLTProcessor en PHP
importStylesheet()carga el XSLTsetParameter()pasa valores dinámicostransformToXML()ejecuta la transformación
💪 Ejercicio Práctico
Modifica la transformación
- Cambia entre orden ascendente y descendente y observa la tabla resultante
- Piensa cómo añadirías una columna más (por ejemplo, un número de fila) a la tabla generada
- ¿Cómo ordenarías alfabéticamente por
autoren vez de poranio? (pista: cambia elselectdexsl:sorty quitadata-type="number")
Ordenar alfabéticamente por autor
<xsl:sort select="autor" order="{$orden}"/>
<!-- Sin data-type="number": se ordena como texto, alfabéticamente -->