我用谷歌搜索并试图找到这个问题的答案,但似乎没有一个解决方案有效。 我有以下 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>
循环有效并拉出每个参与者,但排序顺序有一个奇怪的效果,它会切换位置但不一定将它们排序为正确的顺序。
谁能指出我正确的方向。
顺便说一句,上面的代码是我的代码的精简版本,并且带有虚拟数据,因为实际文件更大更复杂。
提前致谢
约翰
最佳答案
我认为这可能是因为它将值作为字符串进行排序。您是否尝试过以下方法?
<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>
关于按属性排序的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8393565/