按属性排序的XML

时间:2011-12-05 23:49:53

标签: xml

我已经google了一下,并试图找到答案,但没有一个解决方案似乎有效。 我有以下xml架构:

<xml>
  <race>
    <particpant time="3.25" name="joe blogs">
    <particpant time="1.15" name="john Doe">
    <particpant time="2.0" name="A random">
  </race>
</xml>

然后我在xslt中尝试以下转换:

<ul>
   <xsl:for-each select="participant">
   <xsl:sort  order="ascending" select="@time"/>
     <li> <xsl:value-of select="@name"/> (<xsl:value-of select="@time"/>)</li>
   </xsl:for-each>
 </ul>

循环工作并拉出每个参与者,但排序顺序有一个奇怪的效果,它会切换位置,但不一定按顺序排列。

任何人都可以指出我正确的方向。

BTW上面的代码是我的代码的剥离版本,带有虚拟数据,因为实际文件更大更复杂。

提前致谢

约翰

1 个答案:

答案 0 :(得分:3)

我认为这可能是因为它将值排序就好像它们是字符串一样。你试过以下这个吗?

 <ul>
   <xsl:for-each select="participant">
   <xsl:sort data-type="number" order="ascending" select="@time"/>
     <li> <xsl:value-of select="@name"/> (<xsl:value-of select="@time"/>)</li>
   </xsl:for-each>
 </ul>