【问题标题】:XSLT: for each limit acts strangeXSLT:对于每个限制行为都很奇怪
【发布时间】:2011-05-03 19:23:46
【问题描述】:

我有一个 for each 限制显示 3 个项目。 问题是,如果我将它限制为 3 ......它不会像它应该做的那样从第一个条目开始。相反,它从第二个开始。 我的条目排名从 001 到 020。我在这个排名上对 for-each 进行了排序。因此将显示前 4 个。 所以我的 for-each 语句应该有问题吗?

<xsl:for-each select="data/activity-feed/entry[recommended = 'Yes'][position() mod 4]">
   <xsl:sort select="activity-rank" data-type="number" order="ascending" />  
        <a href="{$root}/items">
                <p>  
                     <xsl:value-of select="activity-name"/>
                     <xsl:call-template name="description">
                </p>
        </a>
 </xsl:for-each>

我的 XML:

<data>
    <activity-feed>
        <entry id="65">
                <recommended>Yes</recommended>
                <activity-name handle="forra-dive">Forra Dive</activity-name>
                <activity-rank handle="001">001</activity-rank>
        </entry>
    </activity-feed>
</data>

知道如何只制作 FIRST 4 显示器吗? 谢谢

【问题讨论】:

    标签: xml xslt foreach


    【解决方案1】:

    我认为问题在于,在 for-each 选择中,position() 以条目的 未排序 顺序进行评估。因此,您将按原始(文档)顺序而不是按排名顺序获得前 3 个。如果您显示更多输入数据,我们可以确定。

    如果是这样,请尝试:

    <xsl:for-each select="data/activity-feed/entry[recommended = 'Yes']">
       <xsl:sort select="activity-rank" data-type="number" order="ascending" />  
       <xsl:if test="position() &lt; 4">
          <a href="{$root}/items">
             <p>  
                <xsl:value-of select="activity-name"/>
                <xsl:call-template name="description">
             </p>
          </a>
       </xsl:if>
     </xsl:for-each>
    

    解决方法是,我们正在测试 position() inside 已排序的 for-each 循环,而不是“外部”排序。

    【讨论】:

    • 就是这样!非常感谢!
    【解决方案2】:

    为什么要使用模数?如果使用静态数字,循环限制应该会成功。

    <xsl:for-each select="data/activity/entry[recommended='Yes'][position() < 4]>
        ...
    </xsl:for-each>
    

    【讨论】:

    • 我将 '
    • @Sandor,在这种情况下还有其他问题。您确定排名为 001 的条目将推荐标签设置为“是”吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多