是否有可能做到,以及如何在XSL中实现自然的案例排序?
例如,给定以下XML片段:
<items>
<item>A 24</item>
<item>B 12</item>
<item>B 11</item>
<item>C 10</item>
<item>A 1</item>
<item>B 2</item>
</item>
我如何对输出进行排序,以便我有一个如下的元素列表?
<ul>
<li>A 1</li>
<li>A 24</li>
<li>B 2</li>
<li>B 11</li>
<li>B 12</li>
<li>C 10</li>
</ul>
编辑:我对可以使用任意字符串的解决方案特别感兴趣,例如。那些不遵循共同模式的,类似于PHP natsort的工作方式。
答案 0 :(得分:0)
您可以使用多个xsl:sort
s:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/items">
<ul>
<xsl:apply-templates select="item">
<xsl:sort select="substring-before(., ' ')" />
<xsl:sort select="substring-after(., ' ')" data-type="number" />
</xsl:apply-templates>
</ul>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:value-of select="."/>
</li>
</xsl:template>
</xsl:stylesheet>
在样本输入上运行时,会产生:
<ul>
<li>A 1</li>
<li>A 24</li>
<li>B 2</li>
<li>B 11</li>
<li>B 12</li>
<li>C 10</li>
</ul>
更彻底(通用)自然分类需要更多参与方法。 Dimitre Novatchev在Stack Overflow上提供了an XSLT 1.0 approach,另一个网站似乎有an XSLT 2.0 approach。两者都太长了,不值得在这里复制,所以请在这些链接上寻找它们。