XSLT - 字符串和数字升序,Saxon处理器

时间:2015-07-20 05:04:15

标签: xml xslt xslt-2.0 saxon

我试着理解撒克逊处理器如何选择升序。

我有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>

似乎空字符串首先出现,然后价格有数字,按预期排序且价格有字符串值,先来,

这个命令如何通过Saxon处理器决定?

2 个答案:

答案 0 :(得分:1)

与其他人一样排序自然顺序。空间&lt; 32&gt;首先出现并且数字0-9&lt; 48-57&gt;然后是字母表。见ASCII Code - The extended ASCII table

enter image description here

答案 1 :(得分:1)

  

当我按价格对其进行排序时,它会给我以下结果

如果您按字母顺序排序 ,它会显示仅显示的结果 - 即将price的内容视为文本。如果排序为:

,您将获得不同的结果
<xsl:sort select="price" data-type="number" order="ascending"/>

在这种情况下,所有将无法转换为数字的值。

请注意,用于排序的默认数据类型是文本 - 除非您明确覆盖它 1 ,否则您还会看到“9.00”的价格在之后排序 100.00" 。

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