Aplicando Plantillas en Orden Inverso con XSLT

Al trabajar con datos XML, puede que encuentres escenarios donde necesitas manipular el orden en que se muestran los elementos. Un requisito común es mostrar el contenido de los nodos en orden inverso. Esta publicación del blog te guiará a través del proceso para lograr esto utilizando XSLT (Transformaciones de Lenguaje de Hojas de Estilo Extensible).

Comprendiendo el Problema

Considera la siguiente estructura XML:

<root>
    <node>x</node>
    <node>y</node>
    <node>a</node>
</root>

En este ejemplo, deseas mostrar el contenido de los elementos <node> en orden inverso, resultando en la salida: ayx. Esta es una tarea típica que se puede lograr con XSLT utilizando apply-templates y atributos de ordenación.

La Solución: Invirtiendo el Orden de los Nodos

Para lograr la salida deseada (es decir, mostrar los nodos en orden inverso), utilizaremos el elemento xsl:sort dentro de apply-templates. Aquí hay cómo implementarlo paso a paso:

Paso 1: Coincidiendo con la Plantilla Raíz

Comienza por hacer coincidir el nivel raíz de tu documento XML. Dentro de esta plantilla, aplicarás las plantillas a los elementos <node> utilizando la función de sort para invertir el orden.

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>
  • <xsl:template match="/">: Esto coincide con la raíz del documento XML.
  • <xsl:apply-templates select="root/node">: Esta directiva selecciona todos los elementos <node> para su procesamiento.
  • <xsl:sort select="position()" data-type="number" order="descending"/>: Esto ordena los nodos según sus posiciones en orden descendente, lo que es crucial para mostrarlos en reverso.

Paso 2: Definiendo la Plantilla del Nodo

A continuación, necesitas otra plantilla para manejar cómo se procesa cada <node>. Esto simplemente outputeará el valor de cada elemento <node>.

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
  • <xsl:template match="node">: Esta plantilla coincide con cada elemento <node>.
  • <xsl:value-of select="."/: Esto recupera el valor en forma de cadena del nodo actual y lo muestra.

Código Completo de XSLT

Combinando ambas plantillas, tendrás el siguiente código XSLT completo:

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

Salida

Después de aplicar este código XSLT al XML proporcionado, la salida resultante mostrará los valores del nodo en el orden inverso a su aparición:

ayx

Conclusión

Invertir el orden de los nodos XML utilizando apply-templates en XSLT es sencillo una vez que entiendes cómo utilizar eficazmente la operación sort. Este enfoque es beneficioso cuando necesitas manipular la presentación de datos para informes o aplicaciones web para mejorar la experiencia del usuario.

Siguiendo estos pasos, puedes controlar de manera eficiente la salida de tus datos XML con XSLT. ¡Feliz codificación!