appliquer les modèles dans l'ordre inverse
Question
dis que j'ai ce fichier XML donné
<root>
<node>x</node>
<node>y</node>
<node>a</node>
</root>
et je veux que ce qui suit soit affiché
ayx
en utilisant quelque chose de similaire à
<xsl:template match="/">
<xsl:apply-templates select="root/node"/>
</xsl:template>
<xsl:template match="node">
<xsl:value-of select="."/>
</xsl:template>
La solution
Facile!
<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>
Autres conseils
Vous pouvez le faire en utilisant xsl:sort.Il est important de définir le data-type="number" car sinon, la position sera triée sous forme de chaîne, à la fin, le 10ème nœud serait pris en compte avant le 2ème.
<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow