Aplicando Templates em Ordem Reversa com XSLT

Ao trabalhar com dados XML, você pode encontrar cenários em que é necessário manipular a ordem em que os elementos são exibidos. Um requisito comum é exibir o conteúdo dos nós em ordem reversa. Este post do blog irá guiá-lo através do processo de alcançar isso usando XSLT (Linguagem de Transformação de Folhas de Estilo Extensível).

Entendendo o Problema

Considere a seguinte estrutura XML:

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

Neste exemplo, você deseja exibir o conteúdo dos elementos <node> em ordem reversa, resultando na saída: ayx. Esta é uma tarefa típica que pode ser realizada com XSLT utilizando apply-templates e atributos de ordenação.

A Solução: Revertendo a Ordem dos Nós

Para alcançar a saída desejada (ou seja, exibir os nós em ordem reversa), utilizaremos o elemento xsl:sort dentro do apply-templates. Veja como implementar isso passo a passo:

Passo 1: Correspondendo ao Template Raiz

Comece correspondendo ao nível raiz do seu documento XML. Dentro deste template, você aplicará templates aos elementos <node> enquanto utiliza a função sort para reverter a ordem.

<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="/">: Isso corresponde à raiz do documento XML.
  • <xsl:apply-templates select="root/node">: Esta diretiva seleciona todos os elementos <node> para processamento.
  • <xsl:sort select="position()" data-type="number" order="descending"/>: Isso ordena os nós com base em suas posições em ordem decrescente, o que é crucial para exibi-los em ordem reversa.

Passo 2: Definindo o Template do Nó

Em seguida, você precisa de outro template para lidar com a forma como cada <node> é processado. Isso simplesmente exibirá o valor de cada elemento <node>.

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
  • <xsl:template match="node">: Este template corresponde a cada elemento <node>.
  • <xsl:value-of select="."/>: Isso recupera o valor string do nó atual e o exibe.

Código Completo do XSLT

Combinando ambos os templates, você terá o seguinte código completo de XSLT:

<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>

Saída

Após aplicar este código XSLT ao XML fornecido, a saída resultante exibirá os valores dos nós em ordem reversa de sua aparição:

ayx

Conclusão

Reverter a ordem dos nós XML usando apply-templates em XSLT é simples uma vez que você entende como usar a operação sort de maneira eficaz. Esta abordagem é benéfica quando você precisa manipular a apresentação de dados para relatórios ou aplicações web para aprimorar a experiência do usuário.

Seguindo esses passos, você pode controlar eficientemente a saída dos seus dados XML com XSLT. Feliz codificação!