apply-templates em ordem inversa
Pergunta
dizem que eu tenho esse dado arquivo xml
<root>
<node>x</node>
<node>y</node>
<node>a</node>
</root>
e eu quero que o seguinte seja exibida
ayx
usando algo semelhante a
<xsl:template match="/">
<xsl:apply-templates select="root/node"/>
</xsl:template>
<xsl:template match="node">
<xsl:value-of select="."/>
</xsl:template>
Solução
Fácil!
<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>
Outras dicas
Você pode fazer isso, usando xsl:sort.É importante definir o tipo de dados="número" porque senão, a posição será classificada como uma seqüência de caracteres, final dos mesmos, a 10 nó teria ge considerados antes da 2ª.
<xsl:template match="/">
<xsl:apply-templates select="root/node">
<xsl:sort
select="position()"
order="descending"
data-type="number"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="node">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="root/node[3]"/>
<xsl:apply-templates select="root/node[2]"/>
<xsl:apply-templates select="root/node[1]"/>
</xsl:template>
<xsl:template match="node">
<xsl:value-of select="."/>
</xsl:template>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow