限制for-each循环XSL的排序结果数

时间:2013-09-17 14:38:55

标签: xml xslt

我正在尝试查看是否可以在XSL文件中设置for-each循环设置,该文件通过多个节点,但我想让它只返回前3个结果,例如

<course>
<unit>
    <result>80</result>
</unit>
<unit>
        <result>77</result>
</unit>
<unit>
        <result>96</result>
</unit>
<unit>
    <result>69</result>
</unit>
</course>

然后使用类似于以下内容的for-each循环:

<xsl:for-each select="/course/unit">
<xsl:sort select="result" data-type="number" order="descending"/>
<xsl:value-of select="result"/>
</xsl:for-each>

但问题是如果我这样做: <xsl:for-each select="/course/unit[position() &lt;= 3]"> 它将抓取前3个节点,然后对它进行排序,这不是我需要的,我希望它获得3个最高标记并返回这些节点以显示信息,而不是在它们经历了所有循环后对结果进行排序。我确信有一种简单的方法可以在不使用模板的情况下实现这一点,因此任何提示都将非常受欢迎。

1 个答案:

答案 0 :(得分:5)

使用

<xsl:for-each select="/course/unit">
<xsl:sort select="result" data-type="number" order="descending"/>
  <xsl:if test="position() &lt;= 3">
    <xsl:value-of select="result"/>
  </xsl:if>
</xsl:for-each>