XSLT:针对每个问题

时间:2010-10-27 09:35:54

标签: xslt

它应该很简单, 我想限制我的结果,但也想检查一个节点。 出于某种原因,它不能在一个声明中将它们组合起来吗?

我有一个复选框(推荐),可勾选为“是”。 当我删除for-each中的限制5时,它会显示所有推荐为“是”的项目。当我从for-each测试中删除'recommended ='Yes'时,我将最后的项目限制在5个。将它们组合在一起不会产生任何结果。他们都不再工作了。 我想在推荐'是'上过滤它们,我想将它们限制为5.

<xsl:for-each select="data/resorts/entry[position() &lt; 2 and recommended = 'Yes']">
   <xsl:sort select="top-pick-order" case-order="upper-first"/>
       <a href="{$root}/koh-lipe-resorts/resort-view/{resort-name/@handle}">
           <div id="top-pick-item">
                 <div id="top-pick-text-short">
                  <h3 class="item-heading"><xsl:value-of select="resort-name"/></h3>
                  <p>   
                      <xsl:call-template name="truncate">
                          <xsl:with-param name="value" select="resort-description" mode="formatted"/>
                          <xsl:with-param name="length" select="110" />
                      </xsl:call-template>
                  </p>
                 </div>
           </div>
         </a>
</xsl:for-each>

2 个答案:

答案 0 :(得分:5)

<xsl:for-each select=
   "data/resorts/entry[position() &lt; 6
  and
    recommended = 'Yes']">

这将选择前两个中的所有data/resorts/entry元素,这些元素还具有值recommended的{​​{1}}属性。

但你想要

'Yes'

此表达式首先指定所有 data/resorts/entry[recommended = 'Yes'][position() &lt; 6] 元素,然后仅将它们限制为那些在已获取的节点列表中的位置小于6的元素。 / p>

记住data/resorts/entry函数是上下文相关的,它不能在不改变其含义的情况下在表达式中自由移动!

答案 1 :(得分:0)

由于您未提供某些示例数据,我只能假设recommended<entry />的属性。在这种情况下,您需要在select语句中使用@recommended

<xsl:for-each select="data/resorts/entry[position() &lt; 2 and @recommended = 'Yes']">