我正在尝试查看是否可以在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() <= 3]">
它将抓取前3个节点,然后对它进行排序,这不是我需要的,我希望它获得3个最高标记并返回这些节点以显示信息,而不是在它们经历了所有循环后对结果进行排序。我确信有一种简单的方法可以在不使用模板的情况下实现这一点,因此任何提示都将非常受欢迎。
答案 0 :(得分:5)
使用
<xsl:for-each select="/course/unit">
<xsl:sort select="result" data-type="number" order="descending"/>
<xsl:if test="position() <= 3">
<xsl:value-of select="result"/>
</xsl:if>
</xsl:for-each>