我正在尝试根据属性值订购商品:
<xsl:apply-templates select="Question">
<xsl:sort order="ascending" select="@Value"></xsl:sort>
</xsl:apply-templates>
Run Code Online (Sandbox Code Playgroud)
这确实对它们进行了排序,但我可以得到像1,2,3,...... 10,11,... 20这样的值,它会命令它们1,10,11,... 2,20 ...... 3.等
我也可以像1.A,1.B,2.A,2.B值等
如何在这个优先级中订购这些值以考虑数字内容和字母?
如果您知道每个问题都有一个多部分编号,您可以使用两个<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>
Run Code Online (Sandbox Code Playgroud)
如果某些数字可能包含多个部分而某些部分没有,我想最好的办法是:
<xsl:apply-templates select="Question">
<xsl:sort select="substring-before(concat(@Value, '.'), '.')" data-type="number" />
<xsl:sort select="substring-after(@Value, '.')" />
</xsl:apply-templates>
Run Code Online (Sandbox Code Playgroud)
额外在值的末尾concat(@Value, '.')添加一个' .',以便substring-before()始终获得数字.