结合 XSL for-each 语句,其中特定记录受位置限制
Combine XSL for-each statements where specific records are limited by position
下面的代码实现了预期的结果,但感觉草率。是否可以合并 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,
正在考虑以某种方式为每个循环周期定义一个新的 variable/parameter,然后使用:
<xsl:value-of select="$Brand_Position1" />,
<xsl:value-of select="$Brand_Position2" />,
...
<xsl:value-of select="$Brand_Position5" />,
我想让它尽可能高效。我是 xsl 的新手。谢谢你。
我认为最好从以下内容开始:
<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>
下面的代码实现了预期的结果,但感觉草率。是否可以合并 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,
正在考虑以某种方式为每个循环周期定义一个新的 variable/parameter,然后使用:
<xsl:value-of select="$Brand_Position1" />,
<xsl:value-of select="$Brand_Position2" />,
...
<xsl:value-of select="$Brand_Position5" />,
我想让它尽可能高效。我是 xsl 的新手。谢谢你。
我认为最好从以下内容开始:
<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>