La transformación de documentos XML es una práctica común cuando se necesita presentar o convertir datos estructurados en formatos diferentes, como HTML o JSON. En Java, esta tarea se facilita gracias a la API de XSLT (Extensible Stylesheet Language Transformations) y la clase Transformer
, que forma parte del paquete javax.xml.transform
.
En este artículo, aprenderás cómo transformar documentos XML en otros formatos, como HTML, usando hojas de estilo XSLT y la clase Transformer
.
¿Qué es XSLT?
XSLT es un lenguaje basado en XML que permite definir reglas de transformación para convertir un documento XML en otro formato. El resultado puede ser otro XML, un documento HTML, texto plano u otros tipos de contenido.
Ejemplo de un Documento XML
<libros>
<libro>
<titulo>Java Básico</titulo>
<autor>Juan Pérez</autor>
<precio>19.99</precio>
</libro>
<libro>
<titulo>Programación Avanzada</titulo>
<autor>María Gómez</autor>
<precio>29.99</precio>
</libro>
</libros>
Ejemplo de una Hoja de Estilo XSLT
La hoja de estilo XSLT define cómo transformar el XML. Por ejemplo, convertirlo a HTML:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head>
<title>Lista de Libros</title>
</head>
<body>
<h1>Libros</h1>
<table border="1">
<tr>
<th>Título</th>
<th>Autor</th>
<th>Precio</th>
</tr>
<xsl:for-each select="libros/libro">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="precio"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Transformación de XML con la Clase Transformer
Pasos para la Transformación
- Cargar el documento XML y la hoja de estilo XSLT.
- Crear un objeto
Transformer
con la hoja de estilo. - Aplicar la transformación al documento XML.
Ejemplo: Transformar XML a HTML
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
public class TransformarXML {
public static void main(String[] args) {
try {
// Ruta del documento XML y la hoja de estilo XSLT
File xmlFile = new File("libros.xml");
File xsltFile = new File("libros.xslt");
// Crear objetos StreamSource para XML y XSLT
StreamSource xmlSource = new StreamSource(xmlFile);
StreamSource xsltSource = new StreamSource(xsltFile);
// Crear un TransformerFactory
TransformerFactory factory = TransformerFactory.newInstance();
// Crear un Transformer con la hoja de estilo XSLT
Transformer transformer = factory.newTransformer(xsltSource);
// Salida: archivo HTML
StreamResult result = new StreamResult(new File("libros.html"));
// Aplicar la transformación
transformer.transform(xmlSource, result);
System.out.println("Transformación completada. Archivo generado: libros.html");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explicación del Código
- Cargar el XML y XSLT:
Se utilizan objetosStreamSource
para representar el fichero XML y la hoja de estilo XSLT. - Crear el Transformer:
Usando la fábricaTransformerFactory
, se crea un objetoTransformer
que aplica las reglas de transformación definidas en el XSLT. - Aplicar la Transformación:
El métodotransform()
transforma el documento XML según las reglas del XSLT y genera el resultado en el formato especificado (HTML, texto, etc.).
Manejo de Excepciones
Durante el proceso de transformación, pueden surgir excepciones como:
- TransformerConfigurationException: Si hay un error en la hoja de estilo XSLT.
- TransformerException: Si ocurre un error durante la transformación.
Es recomendable capturarlas para evitar que el programa termine inesperadamente.
Transformación a Otros Formatos
Además de HTML, puedes transformar XML a texto plano o cualquier formato personalizado.
Ejemplo: Transformar XML a Texto Plano
Hoja de estilo XSLT para generar texto:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="libros/libro">
Título: <xsl:value-of select="titulo"/>,
Autor: <xsl:value-of select="autor"/>,
Precio: <xsl:value-of select="precio"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Código Java para generar un fichero de texto:
StreamResult result = new StreamResult(new File("libros.txt"));
transformer.transform(xmlSource, result);
System.out.println("Transformación completada. Archivo generado: libros.txt");
Consejos para el Uso de XSLT en Java
- Validar XML y XSLT:
Asegúrate de que el XML y la hoja de estilo XSLT sean válidos para evitar errores durante la transformación. - Elegir la Salida Adecuada:
UsaStreamResult
para generar salidas en ficheros oDOMResult
para trabajar con objetos DOM. - Personalizar la Transformación:
Puedes establecer parámetros en el objetoTransformer
para personalizar el comportamiento:
transformer.setParameter("titulo", "Nuevo Título");
- Soporte a Gran Escala:
Si trabajas con documentos XML grandes, considera alternativas como SAX para manejar grandes volúmenes de datos de forma eficiente.
Conclusión
La transformación de XML a otros formatos con XSLT y la clase Transformer
es una técnica poderosa y flexible. Con esta herramienta, puedes convertir datos estructurados en documentos de presentación o formatos personalizados de manera eficiente. Los ejemplos proporcionados te servirán como punto de partida para implementar estas transformaciones en tus proyectos. ¡Explora todo el potencial de XML y XSLT en Java!