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 de origen
<?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)

✅ Transformación aplicada Orden: ascendente
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:for-each select="libro">
<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

<xsl:param name="orden" select="'ascending'"/>
$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-each itera nodos
  • xsl:sort ordena antes de iterar
  • data-type="number" ordena numéricamente

XSLTProcessor en PHP

  • importStylesheet() carga el XSLT
  • setParameter() pasa valores dinámicos
  • transformToXML() ejecuta la transformación

💪 Ejercicio Práctico

Modifica la transformación

  1. Cambia entre orden ascendente y descendente y observa la tabla resultante
  2. Piensa cómo añadirías una columna más (por ejemplo, un número de fila) a la tabla generada
  3. ¿Cómo ordenarías alfabéticamente por autor en vez de por anio? (pista: cambia el select de xsl:sort y quita data-type="number")

Ordenar alfabéticamente por autor

<xsl:sort select="autor" order="{$orden}"/>
<!-- Sin data-type="number": se ordena como texto, alfabéticamente -->