xsl:sort在特殊字符如“,:“是礼物。这里有什么问题吗?
我正在尝试使用java dom4j库从xml数据渲染html。虽然真实的的项目有多个排序标准,但我在这里对具体问题进行了总结。
**预期的排序顺序是ASCII顺序。**在线String Sort Toll也给出了我预期的输出。
我有一些xml数据ex:
<employee>
<name>
<![CDATA[test 1.8 - test]]>
</name>
<name>
<![CDATA[test 4 - test]]>
</name>
<name>
<![CDATA[Test 2 - test]]>
</name>
</employee>
我试图排序他们与xsl Transformer与。用于对其进行排序的代码段...
<xsl:for-each select="employee/name">
<xsl:sort select="name" case-order="upper-first"/>
...
预期输出顺序:
Test 2 - test
test 1.8 - test
test 4 - test
我得到的输出顺序:
test 1.8 - test
Test 2 - test
test 4 - test
像这样得到订单
; - ;
& - &
T1 - T1
代替
& - &
; - ;
T1 - T1
3条答案
按热度按时间5sxhfpxr1#
首先,您的代码段对
employee
s进行排序,而不是name
s。现在,您得到的结果是对名称排序后的预期输出。如果你想让
Test 2 - test
的条目出现在第一位,因为它以大写的T
开头,那么你需要这样做:而且你需要一个处理器,它支持XNUMX 2.0或更高版本。
我看不出这个点或其他字符的存在和这有什么关系。
ivqmmu1c2#
期望的排序顺序为ASCII顺序。
如果我们接受“按ASCII顺序排序”的定义,即按字符在ASCII表中出现的顺序进行排序(即按字符在ASCII表中出现的顺序进行排序)。它们的Unicode代码点值),同时只考虑可打印字符(即,字符的范围从
 
到~
),那么我们可以按照下面的例子进行排序:XML格式
XSLT 1.0
**结果 *
(*)重要提示:
上面的结果是使用Xalan 2.7.2处理器和
lang="en"
生成的。如果使用不同的处理器和/或不同的lang
值,则很容易得到不同的结果。在这种情况下,您需要调整$en
参数以反映环境的实际排序顺序。当然,正如我的另一个答案所示,如果您使用的处理器支持XSLT2.0+,那么所有这些都是不必要的。
rseugnpd3#
这可能根本不符合您的要求,但请注意DOM4J对元素内容使用“实时”列表,直接在代码中对节点进行排序变得非常优雅:
当然,它会弄乱任何现有的格式,但这可能是固定的一个漂亮的打印选项。