apply-templates以相反的顺序

时间:2008-09-08 15:03:52

标签: xslt sorting

说我有这个给定的xml文件

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

我想要显示以下内容

ayx

使用与

类似的东西
<xsl:template match="/">
    <xsl:apply-templates select="root/node"/>
</xsl:template>
<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

3 个答案:

答案 0 :(得分:30)

容易!

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

答案 1 :(得分:3)

您可以使用xsl:sort执行此操作。设置data-type =“number”很重要,因为否则,位置将被排序为字符串,为此,第10个节点将在第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>

答案 2 :(得分:0)

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