我正在尝试根据属性值订购商品:
<xsl:apply-templates select="Question">
<xsl:sort order="ascending" select="@Value"></xsl:sort>
</xsl:apply-templates>
这确实对它们进行了排序,但我可以得到像1,2,3,...... 10,11,... 20这样的值,它会命令它们1,10,11,...... 2,20 .. .3。等 我也可能有1.A,1.B,2.A,2.B等值。
如何订购这些值以考虑该优先级中的数字内容和字母?
答案 0 :(得分:7)
如果您知道每个问题都有一个多部分编号,您可以使用两个<xsl:sort>
说明处理它们:
<xsl:apply-templates select="Question">
<xsl:sort select="substring-before(@Value, '.')" data-type="number" />
<xsl:sort select="substring-after(@Value, '.')" />
</xsl:apply-templates>
如果某些数字可能包含多个部分而某些部分没有,我想最好的办法是:
<xsl:apply-templates select="Question">
<xsl:sort select="substring-before(concat(@Value, '.'), '.')" data-type="number" />
<xsl:sort select="substring-after(@Value, '.')" />
</xsl:apply-templates>
额外的concat(@Value, '.')
会在值的末尾添加“.
”,以便substring-before()
始终获得该号码。
答案 1 :(得分:2)
您可以使用data-type
属性按数字顺序排序:
<xsl:sort order="ascending" select="@Value" data-type="number"></xsl:sort>
内置排序功能不支持更复杂的排序(例如您提到的多部分键)。
答案 2 :(得分:0)