我试图看看是否有可能在一个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>
然后使用类似于以下的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个最高标记并返回这些节点以显示信息,而不是在它们经历了所有循环后对结果进行排序.我确信有一种简单的方法可以在不使用模板的情况下实现这一点,因此任何提示都将非常受欢迎.
解决方法
使用
<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>