在XSLT1.0中为特殊字符(空格,/等)排序

时间:2015-07-13 06:00:45

标签: xml xslt-1.0

我在XSLT1.0中为空间字符排序时遇到问题。我在XSLT中对特定字段进行排序,比如'fundName',其值为'fundname / A'和/或'fundname A'。根据我的理解,排序将根据每个字符的ASCII值完成,并应按顺序返回:'fundname A','fundname / A'。但我得到的值首先是“/”,然后是“空间”值。

以下是代码:

INPUT:
<fundList>
  <funds>
     <fundName>JNL/INSTITUTIONAL ALT 35</fundName>
     <fundCode>12</fundCode>
  </funds>  
  <funds>
     <fundName>JNL DISC MODERATE</fundName>
     <fundCode>15</fundCode>
  </funds>
  <funds>
     <fundName>JNL/WMC MONEY MARKET</fundName>
     <fundCode>10</fundCode>
  </funds>
</fundList>

XSLT:
<xsl:for-each select="fundList/funds">
  <xsl:sort select="fundName" order="ascending" />
  <xsl:sort select="fundCode" order="ascending" />

  <fundName><xsl:value-of select="fundName" /></fundName>
</xsl:for-each>

OUTPUT:
JNL/INSTITUTIONAL ALT 35
JNL/WMC MONEY MARKET
JNL DISC MODERATE

注意:但是,我在网上试过这个,它给出了正确的回复(第一个空格,然后是/)。

1 个答案:

答案 0 :(得分:0)

排序顺序取决于您使用的XSLT处理器,因此完全可以预期不同的处理器会给您不同的结果。某些处理器可能会根据Unicode(或ASCII)代码值进行排序,但并不能保证这一点:处理器通常会尝试更智能的排序,例如您在书的索引中找到的;它可能完全取决于您在操作系统级别的语言选择。

如果您想要更精确的控制,您需要查看特定处理器的文档,但是您可以通过使用translate()函数将排序键转换为对其进行排序的其他值来实现您的目标。你渴望的方式。