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!