2010-08-16 54 views
1

我不确定这是否是错误,或者这只是XSLT排序的工作原理。需要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()可以将字符串转换为数字,但我不知道在这种情况下如何使用它。

的我能做些什么来解决这个任何建议,将不胜感激:)

回答

3

默认xsl:sort元素会按字母顺序排序。

你需要用的number一个增值的data-type属性来指定数字的排序顺序:

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

谢谢!我已经使用了这个,但没有遇到数据类型。 – developer 2010-08-16 16:53:05

+0

@iHeartGreek - 总是看看规格或教程网站。他们将拥有所有的属性和含义。 – Oded 2010-08-16 16:55:20