XSLT (XSL Transformations, Extensible Stylesheet Language Transformations) es un lenguaje de programación que se basa en XML y cuyo propósito es manipular y transformar XML. Es un lenguaje de programación funcional y un estándar W3C. Usando XSLT puede transformar uno o más documentos XML en un resultado que podría tener una variedad de formatos de salida (XML, HTML, texto).
Para comprender XSLT, es mejor tener un buen conocimiento práctico de:
Sin estos dos conceptos subyacentes, tendría dificultades para aprender XSLT. En primer lugar, porque un documento XSLT es un documento XML. Y en segundo lugar, los documentos XSLT utilizan XPath para consultar el documento XML que se está transformando.
Lectura recomendada: https://en.wikipedia.org/wiki/XSLT
Versión | Especificación | Estado | Fecha de lanzamiento |
---|---|---|---|
XSLT 1.0 | https://www.w3.org/TR/xslt | Recomendación | 1998-08-18 |
XSLT 2.0 | https://www.w3.org/TR/xslt20 | Recomendación | 2007-01-23 |
XSLT 3.0 | https://www.w3.org/TR/xslt-30 | Recomendación del candidato | 2015-11-19 |
XSLT es un lenguaje de programación especial; se utiliza ampliamente para transformar documentos XML en un formato XML diferente, en HTML o en formatos basados en texto.
Hay dos versiones principales de XSLT en uso: XSLT 1.0 y XSLT 2.0. XSLT 1.0 se implementa más ampliamente, pero tiene muchas restricciones y limitaciones en comparación con XSLT 2.0; Tendrá que decidir qué versión utilizar. Si un procesador XSLT 2.0 está disponible para su entorno elegido, entonces esta es casi siempre la mejor opción.
(XSLT 1.0 salió a la venta en noviembre de 1999, y aparecieron muchas implementaciones en un año o dos, tanto de proveedores tradicionales como Microsoft, IBM, Sun y Oracle, como de entusiastas individuales que trabajaban en su tiempo libre. XSLT 2.0 salió en enero 2007, y muchos de los procesadores 1.0 originales nunca se actualizaron, porque sus desarrolladores habían perdido interés. El procesador XSLT 2.0 más utilizado es Saxon, pero no tiene el campo para sí mismo: otros productos independientes incluyen RaptorXML (de Altova ), XmlPrime (de CBCL) y Exselt, y los procesadores 2.0 también están disponibles incrustados en WebLogic de IBM, en el servidor de bases de datos XML de MarkLogic y en el Acelerador de XML de Intel.
La especificación de XSLT 3.0 es técnicamente completa (recomendación propuesta en abril de 2017), pero por el momento es mejor considerarla como un punto de inflexión: considérelo solo si tiene una necesidad urgente de sus nuevas funciones, como transmisión, paquetes, soporte JSON , o probar / atrapar. Hay tres implementaciones conocidas: Saxon, Exselt y RaptorXML.
Para comenzar con XSLT tienes varias opciones:
Utilice una herramienta XSLT en línea. Hay varios disponibles (busque "herramienta XSLT en línea"), un IDE en línea muy confiable es http://xsltransform.net/ . Esta es una buena manera de obtener una idea inicial del lenguaje, pero no querrá continuar de esta manera una vez que esté haciendo un desarrollo real.
Utilice el motor XSLT integrado en cada navegador. Al igual que con las herramientas en línea, estas tienen la ventaja de que no necesita instalar nada; pero los navegadores solo admiten XSLT 1.0, solo admiten la conversión de XML a HTML y tienen un soporte de depuración muy débil. Un desarrollo muy reciente, pero aún experimental, es Saxon-JS, que permite la ejecución de XSLT 2.0 (y partes de XSLT 3.0) en el navegador.
Instale un procesador XSLT (como Saxon o xsltproc). La mayoría de estos productos se pueden invocar utilizando la línea de comandos del sistema operativo o utilizando una API para lenguajes de programación particulares, como Java, C, C # o Python.
Instale un entorno de desarrollo XML como Altova XML Spy, oXygen de SyncroSoft o Stylus Studio. Si bien esta es una opción más costosa, brinda una capacidad de depuración y soporte de desarrollo mucho más rica.
Cualquiera que sea la opción que elija, primero debe decidir si desea utilizar XSLT 1.0 o XSLT 2.0.
Aquí hay un ejemplo simple que usa XSLT para convertir datos en un archivo XML en una tabla en un archivo HTML. Puedes usarlo para experimentar con simples transformaciones XSLT.
Requisito previo: Instale un entorno de ejecución de Java y agregue la ubicación del JRE a su variable PATH. (En Windows, la mayoría de los instaladores agregarán Java a su ruta). Si esto funciona, debería poder abrir una ventana de línea de comandos y ejecutar el comando java -version
y obtener una copia impresa de la información sobre su JRE.
pets.xml
con el siguiente código: <pets> <petType name="Dogs"> <pet id="123" name="Sparky" vaccineStatus="vaccinated" healthStatus="healthy"/> <pet id="234" name="Sadie" vaccineStatus="unvaccinated" healthStatus="sick"/> <pet id="345" name="Herman" vaccineStatus="unvaccinated" healthStatus="unknown"/> </petType> <petType name="Cats"> <pet id="456" name="Cleo" vaccineStatus="vaccinated" healthStatus="healthy"/> <pet id="567" name="Janet" vaccineStatus="unvaccinated" healthStatus="healthy"/> <pet id="678" name="Furry" vaccineStatus="vaccinated" healthStatus="sick"/> </petType> </pets>
petTransform.xsl
con el siguiente código: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <!-- handle the root XML element --> <xsl:template match="/"> <html><head> <title>Pets that are available for adoption</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="pets"> <xsl:apply-templates/> </xsl:template> <xsl:template match="petType"> <h2><xsl:value-of select="@name"/></h2> <table id="{@name}"> <tr> <th colname="id">ID</th> <th colname="name">Name</th> <th colname="vaccinated">Vaccine status</th> <th colname="health">Health status</th> </tr> <tbody> <!-- add a row for each pet in this category --> <xsl:for-each select="pet"> <tr> <td colname="id"><xsl:value-of select="@id"/></td> <td colname="name"><xsl:value-of select="@name"/></td> <td colname="vaccinated"><xsl:value-of select="@vaccineStatus"/></td> <td colname="health"><xsl:value-of select="@healthStatus"/></td> </tr> </xsl:for-each> </tbody> </table> </xsl:template> <!-- ignore the content of other tags because we processed them elsewhere --> <xsl:template match="*"> <!-- do nothing --> </xsl:template> </xsl:stylesheet>
path_to_saxon.jar
es la ruta completa al archivo saxon9he.jar
: java -jar "path_to_saxon.jar" -o
petOutput.html -s:pets.xml -xsl:pettransform.xslt
Por ejemplo:
java -jar "C:\Program Files\SaxonHE9-7-0-7J\saxon9he.jar" -o
petOutput.html -s:pets.xml -xsl:pettransform.xslt
Asegúrese de ejecutar este comando en una sola línea.
petOutput.html
en un editor de texto. Debe tener un aspecto como este: <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Pets that are available for adoption</title>
</head>
<body>
<h2>Dogs</h2>
<table id="Dogs">
<tr>
<th colname="id">ID</th>
<th colname="name">Name</th>
<th colname="vaccinated">Vaccine status</th>
<th colname="health">Health status</th>
</tr>
<tbody>
<tr>
<td colname="id">123</td>
<td colname="name">Sparky</td>
<td colname="vaccinated">vaccinated</td>
<td colname="health">healthy</td>
</tr>
<tr>
<td colname="id">234</td>
<td colname="name">Sadie</td>
<td colname="vaccinated">unvaccinated</td>
<td colname="health">sick</td>
</tr>
<tr>
<td colname="id">345</td>
<td colname="name">Herman</td>
<td colname="vaccinated">unvaccinated</td>
<td colname="health">unknown</td>
</tr>
</tbody>
</table>
<h2>Cats</h2>
<table id="Cats">
<tr>
<th colname="id">ID</th>
<th colname="name">Name</th>
<th colname="vaccinated">Vaccine status</th>
<th colname="health">Health status</th>
</tr>
<tbody>
<tr>
<td colname="id">456</td>
<td colname="name">Cleo</td>
<td colname="vaccinated">vaccinated</td>
<td colname="health">healthy</td>
</tr>
<tr>
<td colname="id">567</td>
<td colname="name">Janet</td>
<td colname="vaccinated">unvaccinated</td>
<td colname="health">healthy</td>
</tr>
<tr>
<td colname="id">678</td>
<td colname="name">Furry</td>
<td colname="vaccinated">vaccinated</td>
<td colname="health">sick</td>
</tr>
</tbody>
</table>
</body>
</html>
petOutput.html
en un navegador web. Debe mostrar los datos en una tabla simple.