以下代码实现了预期的结果,但感觉很草率。是否可以结合for-each语句?
XSL:
<xsl:for-each select="ROW[Start_Time = '2:00 PM']">
<xsl:sort select="order" order="descending" data-type="number" />
<xsl:value-of select="Brand" /><br/>
</xsl:for-each>
Top5:
<xsl:for-each select="ROW[Start_Time = '2:00 PM']">
<xsl:sort select="order" order="descending" data-type="number" />
<xsl:if test="not(position() > '5')">
<xsl:value-of select="Brand" />,
</xsl:if>
</xsl:for-each>
工作输出:
Nike
Addidas
Coke
Pepsi
Burger King
Sprite
Root Beer
Brio Chinotto
Top5: Nike, Addidas, Coke, Pepsi, Burger King,
考虑以某种方式定义每个循环周期的新变量/参数,然后使用:
<xsl:value-of select="$Brand_Position1" />,
<xsl:value-of select="$Brand_Position2" />,
...
<xsl:value-of select="$Brand_Position5" />,
我想尽可能提高效率。对xsl来说是新手。谢谢。
答案 0 :(得分:0)
我认为最好从以下内容开始:
<xsl:variable name="sorted-rows">
<xsl:for-each select="ROW[Start_Time = '2:00 PM']">
<xsl:sort select="order" order="descending" data-type="number" />
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:variable>
以便节点仅排序一次。
然后,假设您正在使用XSLT 1.0,您可以使用:
<xsl:variable name="sorted-rows-set" select="exsl:node-set($sorted-rows)/ROW" />
和
<xsl:for-each select="$sorted-rows-set">
<xsl:value-of select="Brand"/><br/>
</xsl:for-each>
和
<xsl:text>Top 5:</xsl:text>
<xsl:for-each select="$sorted-rows-set[position() <= 5]">
<xsl:value-of select="Brand"/>
<xsl:text>,</xsl:text>
</xsl:for-each>