默认情况下,xslt按字母顺序排序,然后按字母顺序排序。 如果我首先按字母顺序排在数字之后怎么办。
<root>
<item>B3</item>
<item>A1</item>
<item>C2</item>
<item>3B</item>
<item>2C</item>
<item>1A</item>
</root>
我想要:
<root>
<item>A1</item>
<item>B3</item>
<item>C2</item>
<item>1A</item>
<item>2C</item>
<item>3B</item>
</root>
问题是我不知道名字中有多少字母或多少字母。它可以是1054-FS或C104-G。 C20-H也应该在C101-H之前进行评估。
如果不知道将要推进什么,这是否容易实现?
感谢。
答案 0 :(得分:0)
我认为你所说的是你想要一个字母在数字前面的整理顺序。
如果您希望C20在C101之前,那么您还在寻找一个对连续数字进行分组的排序规则,并将它们排序为数字。
说XSLT(总是)在字母前排序数字是不正确的。默认排序规则取决于您使用的XSLT处理器,它未在语言规范中定义。
在XSLT 3.0和Saxon 9.6中,您可以使用Unicode排序算法来实现此效果。你会写
<xsl:sort select="..."
collation="http://www.w3.org/2013/collation/UCA?numeric=yes;reorder=Latn,digit"/>
(我没有测试过这个具体的例子)。
如果您正在使用其他处理器,则必须检查其文档以查看它提供的排序规则选项。你有时可以通过使用<xsl:sort select="translate(....)"/>
计算一个按照你想要的方式工作的排序键来玩弄技巧。