XSLT (Extensible Stylesheet Language Transformations) es un lenguaje utilizado para transformar documentos XML en otros formatos, como HTML, texto plano, o incluso en otros documentos XML. XSLT es una herramienta poderosa que permite a los desarrolladores manipular y presentar datos XML de una manera flexible y eficiente. En este artículo, proporcionaremos una introducción a XSLT con ejemplos prácticos adecuados para niveles principiantes e intermedios.
¿Qué es XSLT?
XSLT es parte de la familia de tecnologías XSL, que también incluye XSL-FO (Formatting Objects). Utiliza una sintaxis basada en XML para definir reglas de transformación que pueden convertir documentos XML de una estructura a otra. Las transformaciones XSLT son declarativas, lo que significa que se centra en describir el resultado deseado más que el proceso para obtenerlo.
Estructura Básica de un Estilo XSLT
Un archivo XSLT es un documento XML que contiene elementos y atributos del espacio de nombres XSLT. La estructura básica incluye:
- o : El elemento raíz que define el documento XSLT.
- : Define una plantilla que se aplica a un patrón de nodos en el documento XML de origen.
- : Extrae y muestra el valor de un nodo.
- : Aplica plantillas a los nodos seleccionados.
Ejemplo Básico de Transformación
Imaginemos un documento XML sencillo que describe una lista de empleados:
<employees>
<employee>
<name>John Doe</name>
<position>Developer</position>
<salary>50000</salary>
</employee>
<employee>
<name>Jane Smith</name>
<position>Manager</position>
<salary>75000</salary>
</employee>
</employees>
Queremos transformar este XML en una lista HTML. Un archivo XSLT para realizar esta transformación podría ser:
<?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>
<body>
<h2>Employee List</h2>
<table border="1">
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<xsl:apply-templates select="employees/employee"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="employee">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="position"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
En este ejemplo:
- El primer coincide con el nodo raíz «/» del documento XML y define la estructura básica del documento HTML de salida.
- El se utiliza para aplicar plantillas a cada elemento
<employee>
en el documento XML de origen. - El segundo define cómo se debe transformar cada elemento
<employee>
en una fila de tabla HTML (<tr>
), extrayendo los valores dename
,position
, ysalary
.
Ejemplos Intermedios de XSLT
Filtrado de Datos
XSLT permite filtrar datos para incluir solo aquellos nodos que cumplen ciertas condiciones. A continuación, se muestra cómo filtrar empleados con un salario superior a 60000.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>Employees with Salary over 60000</h2>
<table border="1">
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<xsl:apply-templates select="employees/employee[salary > 60000]"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="employee">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="position"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
En este ejemplo, la expresión XPath salary > 60000
en el atributo select
de <xsl:apply-templates>
filtra los empleados cuyo salario es superior a 60000.
Uso de Variables
Las variables en XSLT se definen usando el elemento <xsl:variable>
y se pueden usar para almacenar valores que se utilizan varias veces o para realizar cálculos complejos.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>Employee List with Annual Bonus</h2>
<table border="1">
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Annual Bonus</th>
</tr>
<xsl:apply-templates select="employees/employee"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="employee">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="position"/></td>
<td><xsl:value-of select="salary"/></td>
<td>
<xsl:variable name="bonus" select="salary * 0.1"/>
<xsl:value-of select="$bonus"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
En este ejemplo, se define una variable $bonus
que calcula el 10% del salario (salary * 0.1
) y se muestra como «Annual Bonus» en la salida HTML.
Ordenamiento de Datos
XSLT permite ordenar datos utilizando el elemento <xsl:sort>
dentro de <xsl:for-each>
o <xsl:apply-templates>
.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>Sorted Employee List</h2>
<table border="1">
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<xsl:for-each select="employees/employee">
<xsl:sort select="name" order="ascending"/>
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="position"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
En este ejemplo, los empleados se ordenan alfabéticamente por nombre usando <xsl:sort>
.
Conclusión
XSLT es una herramienta poderosa y flexible para transformar documentos XML. Desde las transformaciones básicas hasta las más avanzadas, como el filtrado, el uso de variables y el ordenamiento de datos, XSLT ofrece una amplia gama de posibilidades para manipular y presentar datos XML de manera eficiente. Aprender y dominar estas técnicas permite a los desarrolladores crear presentaciones dinámicas y personalizadas de datos XML, mejorando significativamente la capacidad de trabajar con XML en diversas aplicaciones.
Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.