我试图看看是否有可能在一个XSL文件中有一个for-each循环设置,该文件通过许多节点,但我想让它只返回前三个结果,例如
<course>
<unit>
<result>80</result>
</unit>
<unit>
<result>77</result>
</unit>
<unit>
<result>96</result>
</unit>
<unit>
<result>69</result>
</unit>
</course>
Run Code Online (Sandbox Code Playgroud)
然后使用类似于以下的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>
Run Code Online (Sandbox Code Playgroud)
但问题是如果我做了类似的事情:
<xsl:for-each select="/course/unit[position() <= 3]">
它会抓住前3个节点,然后对它进行排序,这不是我需要的,我希望它获得3个最高标记并返回这些节点以显示信息而不是排序他们经历了所有循环后的结果.我确信有一种简单的方法可以在不使用模板的情况下实现这一点,因此任何提示都将非常受欢迎.
使用
<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>
Run Code Online (Sandbox Code Playgroud)