xsl:sort:按数值对两位数进行排序
xsl:sort: sorting double digit by numeric value
更新:示例并添加一些信息。
我必须在 XSLT 1.0 中按数字顺序整理下面的数字。 “代码”遵循以下模式:
例如,
<?xml version="1.0" encoding="ISO-8859-1"?>
<DATA>
<CTX>
<VA>
<code>25896_1_1_1</code>
</VA>
<VA>
<code>25896_10_1_1</code>
</VA>
<VA>
<code>25896_2_1_2</code>
</VA>
<VA>
<code>25896_3_1_1</code>
</VA>
<VA>
<code>25896_4_1_1</code>
</VA>
<VA>
<code>25897_1_1_1</code>
</VA>
<VA>
<code>25897_2_1_1</code>
</VA>
<VA>
<code>25897_2_1_2</code>
</VA>
</CTX>
</DATA>
当我执行 时,它会显示上面的结果。
但是,我希望它是这样的:
25896_1_1_1
25896_2_1_2
25896_3_1_1
25896_4_1_1
25896_10_1_1
25897_1_1_1
25897_2_1_1
25897_2_1_2
我该怎么做?
JAXP XSLT API (javax.xml.transform) 转换 xml 文件。使用 XSL 转换,引擎是 Saxon 6.5.5 // https://xml.apache.org/xalan-j/trax.html
要在纯 XSLT 1.0 中执行此操作,您需要以简单的方式执行此操作:
<xsl:sort select="substring-before(code, '_')" data-type="number"/>
<xsl:sort select="substring-before(substring-after(code, '_'), '_')" data-type="number"/>
<xsl:sort select="substring-before(substring-after(substring-after(code, '_'), '_'), '_')" data-type="number"/>
<xsl:sort select="substring-after(substring-after(substring-after(code, '_'), '_'), '_')" data-type="number"/>
如果你的处理器恰好支持EXSLT str:tokenize()
扩展功能,你可以让它更优雅一点:
<xsl:sort select="str:tokenize(code, '_')[1]" data-type="number"/>
<xsl:sort select="str:tokenize(code, '_')[2]" data-type="number"/>
<xsl:sort select="str:tokenize(code, '_')[3]" data-type="number"/>
<xsl:sort select="str:tokenize(code, '_')[4]" data-type="number"/>
未测试,因为没有提供代码。
更新:示例并添加一些信息。
我必须在 XSLT 1.0 中按数字顺序整理下面的数字。 “代码”遵循以下模式:
例如,
<?xml version="1.0" encoding="ISO-8859-1"?>
<DATA>
<CTX>
<VA>
<code>25896_1_1_1</code>
</VA>
<VA>
<code>25896_10_1_1</code>
</VA>
<VA>
<code>25896_2_1_2</code>
</VA>
<VA>
<code>25896_3_1_1</code>
</VA>
<VA>
<code>25896_4_1_1</code>
</VA>
<VA>
<code>25897_1_1_1</code>
</VA>
<VA>
<code>25897_2_1_1</code>
</VA>
<VA>
<code>25897_2_1_2</code>
</VA>
</CTX>
</DATA>
当我执行
但是,我希望它是这样的:
25896_1_1_1
25896_2_1_2
25896_3_1_1
25896_4_1_1
25896_10_1_1
25897_1_1_1
25897_2_1_1
25897_2_1_2
我该怎么做?
JAXP XSLT API (javax.xml.transform) 转换 xml 文件。使用 XSL 转换,引擎是 Saxon 6.5.5 // https://xml.apache.org/xalan-j/trax.html
要在纯 XSLT 1.0 中执行此操作,您需要以简单的方式执行此操作:
<xsl:sort select="substring-before(code, '_')" data-type="number"/>
<xsl:sort select="substring-before(substring-after(code, '_'), '_')" data-type="number"/>
<xsl:sort select="substring-before(substring-after(substring-after(code, '_'), '_'), '_')" data-type="number"/>
<xsl:sort select="substring-after(substring-after(substring-after(code, '_'), '_'), '_')" data-type="number"/>
如果你的处理器恰好支持EXSLT str:tokenize()
扩展功能,你可以让它更优雅一点:
<xsl:sort select="str:tokenize(code, '_')[1]" data-type="number"/>
<xsl:sort select="str:tokenize(code, '_')[2]" data-type="number"/>
<xsl:sort select="str:tokenize(code, '_')[3]" data-type="number"/>
<xsl:sort select="str:tokenize(code, '_')[4]" data-type="number"/>
未测试,因为没有提供代码。