代码之家  ›  专栏  ›  技术社区  ›  developer

需要使用XSLT排序将某些字符串视为数字

  •  1
  • developer  · 技术社区  · 14 年前

    我不确定这是否是一个错误,或者这是否只是XSLT排序的工作方式。

    当我执行以下操作时:

    <xsl:apply-templates select="//*[@id&lt;=50000]">
      <xsl:sort select="@id" />
    </xsl:apply-templates>
    

    结果不会像数字一样排序。

    例如,我会得到以下结果:

    @id 0
    @id 1
    @id -1
    @id 100
    @id -100
    @id 12345
    @id 2
    @id -2
    @id 200
    
    etc..
    

    但我希望结果是:

    @id -100
    @id -2
    @id -1
    @id 0
    @id 1
    @id 2
    @id 100
    @id 200
    @id 12345
    
    etc..
    

    我如何才能得到排序来对结果进行数值处理?

    我知道number()可以将字符串转换为数字,但我不知道在这个上下文中如何使用它。

    对于我能做些什么来解决这个问题的任何建议都将不胜感激:)

    1 回复  |  直到 14 年前
        1
  •  3
  •   Oded    14 年前

    这个 xsl:sort 默认情况下,元素将按字母顺序排序。

    您需要通过添加 data-type 值为的属性 number :

    <xsl:apply-templates select="//*[@id&lt;=50000]">
      <xsl:sort select="@id" data-type="number" />
    </xsl:apply-templates>