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

XSLT - Strings and numbers ascending order, 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>

似乎空字符串在前,然后价格有数字,按预期排序并且价格有字符串值,在前,

Saxon 处理器如何决定这个顺序??

它的排序与其他排序一样自然。 Space <32> 在前,数字 0-9 <48-57> 然后是字母。参见 ASCII Code - The extended ASCII table

when I sort this by price I it give me following results

如果您按字母顺序 排序,它会给您 显示的结果 - 即处理 price 的内容作为文本。如果您排序为:

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

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

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


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