首先,<xsl:sort...
必须出现在 a<xsl:apply-templates...
或<xsl:for-each...
标签内。
要按照您的需要使用主观逻辑进行排序,您可以采用几种方法。最简单的大概是这样的:
XML
<root>
<item>dog</item>
<item>cat</item>
<item>horse</item>
<item>dragonfly</item>
</root>
XSL
<!-- this sheet vars -->
<xsl:variable name='sort_order' select='"dragonfly|horse|dog|cat"' />
<!-- root and static content -->
<xsl:template match="/">
<xsl:apply-templates select='root/item'>
<xsl:sort select='string-length(substring-before($sort_order, current()/text()))' data-type='number' />
</xsl:apply-templates>
</xsl:template>
<!-- iteration content - animal -->
<xsl:template match='item'>
<p><xsl:value-of select='.' /></p>
</xsl:template>
您可以在此 XMLPlayground 会话中对其进行测试。
正如您可能看到的那样,这个概念是将所需的排序顺序声明为一个字符串,然后根据每个节点的文本值在该排序字符串中的位置迭代地对我们的节点进行排序。