2015-07-20 3 views
0

Я пытаюсь понять, как процессор саксона выбирает по возрастанию.XSLT - Строки и номера в порядке возрастания, Saxon processor

У меня есть 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 в качестве числовых данных типа, и вы используете схемы-Aware процессора.

+0

очень четкий ответ. – sanjay

+0

Более конкретно: XSLT 2.0 говорит, что порядок по умолчанию зависит от реализации. В реализации Saxon порядок по умолчанию определяется значениями кода Unicode. Если вам нужна цифровая сортировка, использование типа data = «number» работает хорошо. Если у вас есть смесь текстовых и числовых, то задание 'collation =" http: //saxon.sf.net/collation? 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-таблицы,« она не очень хорошо удерживает ее как неназванный стандарт. –

Смежные вопросы