aplicar plantillas en orden inverso
Pregunta
digo que tengo este archivo xml dado
<root>
<node>x</node>
<node>y</node>
<node>a</node>
</root>
y quiero que se muestre lo siguiente
ayx
usando algo similar a
<xsl:template match="/">
<xsl:apply-templates select="root/node"/>
</xsl:template>
<xsl:template match="node">
<xsl:value-of select="."/>
</xsl:template>
Solución
¡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>
Otros consejos
Puedes hacer esto usando xsl:sort.Es importante establecer el tipo de datos = "número" porque, de lo contrario, la posición se ordenará como una cadena, al final de la cual, el décimo nodo se consideraría antes que el segundo.
<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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow