是的,有可能。将模板应用于 List 元素时,使用具有属性 order="descending" 的 <xsl:sort> 元素。
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method = "xml" />
<xsl:template match = "/ListItems" >
<xsl:copy>
<xsl:apply-templates select = "List" >
<xsl:sort order="descending" select="position()" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match = "node()|@*" >
<xsl:copy>
<xsl:apply-templates select = "node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match = "List" >
<xsl:copy>
<xsl:apply-templates select = "name"/>
<index><xsl:value-of select="1 + last() - position()"/></index>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
编辑:我忘了在排序元素中包含 select="position()" data-type="number" 属性
再次编辑以回答您的其他要求:已替换(如丹尼尔已指出)
<xsl:apply-templates select = "node()|@*"/>
这样
<xsl:apply-templates select = "name"/>
或者,如果您愿意,可以使用它。注意最后一个空模板,它抑制了除子名称之外的任何列表的孩子
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method = "xml" />
<xsl:template match = "/ListItems" >
<xsl:copy>
<xsl:apply-templates select = "List" >
<xsl:sort order="descending" select="position()" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match = "node()|@*" >
<xsl:copy>
<xsl:apply-templates select = "node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match = "List" >
<xsl:copy>
<xsl:apply-templates select = "node()|@*"/>
<index><xsl:value-of select="1 + last() - position()"/></index>
</xsl:copy>
</xsl:template>
<xsl:template match="List/*[not(self::name)]"/>
</xsl:stylesheet>