2015-07-20 51 views
0

我试图了解撒克逊处理器如何选择升序。XSLT - 字符串和数字升序,撒克逊处理器

我有喜欢的XML如下

<catalog> 
    <cd> 
     <title lan="en">Empire Burlesque</title> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
    <cd> 
     <title lan="en">Hide your heart</title> 
     <price> </price> 
     <year>1988</year> 
    </cd> 
    <cd> 
     <title lan="fr">Greatest Hits</title> 
     <price>13.90</price> 
     <year>1982</year> 
    </cd> 
    <cd> 
     <title lan="sp">Still got the blues</title> 
     <price>abc</price> 
     <year>1990</year> 
    </cd> 
    <cd> 
     <title lan="fr">Eros</title> 
     <price>24.90</price> 
     <year>1997</year> 
    </cd> 
</catalog> 

,当我这个排序按价格我把它给我下面的结果。请注意,我将空字符串放在一个价格值和字符串'abc'没有另一个价格值。

<catalog> 
     <cd> 
      <title lan="en">Hide your heart</title> 
      <price> </price> 
      <year>1988</year> 
     </cd>   
     <cd> 
      <title lan="en">Empire Burlesque</title> 
      <price>10.90</price> 
      <year>1985</year> 
     </cd> 

     <cd> 
      <title lan="fr">Greatest Hits</title> 
      <price>13.90</price> 
      <year>1982</year> 
     </cd> 

     <cd> 
      <title lan="fr">Eros</title> 
      <price>24.90</price> 
      <year>1997</year> 
     </cd> 
     <cd> 
      <title lan="sp">Still got the blues</title> 
      <price>abc</price> 
      <year>1990</year> 
     </cd>  
</catalog> 

它似乎空字符串是第一位的,那么价格有数字,预期和价格上具有字符串值已经整理,已经是第一位的,

如何这个顺序由撒克逊处理器决定?

回答

1

当我解决这通过价格,我把它给了我下面的结果

它会给你显示只有,如果你是按字母顺序排序的结果 - 即将price的内容视为文本。你会得到一个不同的结果,如果您排序为:

<xsl:sort select="price" data-type="number" order="ascending"/> 

在这种情况下,所有不能转换为数字将是第一位的值。

注意,默认的数据类型分类是文本 - 除非你覆盖它明确,你还会看到“9.00”后的价格“100.00”分类


(1),或者如果你具有限定price作为数字数据类型的模式,并且正在使用一个模式感知处理器。

+0

非常明确的答案。 – sanjay

+0

更具体地说:XSLT 2.0表示默认顺序是依赖于实现的。在Saxon实现中,默认顺序是通过Unicode代码值进行的。如果你想要数字排序,使用data-type =“number”效果很好。如果你有混合的文本和数字,指定'collat​​ion =“http://saxon.sf.net/collat​​ion?alphanumeric = yes'可能会给出最好的结果 - 尽管我不确定它是否也处理十进制数作为整数。 –

1

它像其他人一样排序自然顺序。空间< 32>先来,数字0-9 < 48-57>然后字母。见ASCII Code - The extended ASCII table

enter image description here

+1

有没有这样的事情作为一个“自然”的顺序。甚至字母顺序也不总是遵循ASCII顺序。 –

+0

@ michael.hor257k注意谢谢。 – vels4j

+0

无论XML文档的编码如何,所有字符都将被转换并按Unicode处理。而且,正如你的链接网页所说,“8位[扩展] ASCII表格有几种不同的变化形式,”把它作为一个未命名的标准是没有用的。 –