2015-07-20 54 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表格有幾種不同的變化形式,」把它作爲一個未命名的標準是沒有用的。 –