2010-10-27 83 views
2

它應該是非常簡單的, 我想限制我的結果在這個每個,但也想檢查一個節點。 由於某種原因,它不能在一個聲明中將它們結合起來?XSLT:對於每個問題

我有一個複選框(推薦),可勾選'是'。 當我刪除for-each中的限制5時,它會顯示'Yes'上推薦的所有項目。當我從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> 
+0

請包括輸入XSLT的樣本(包括匹配和不匹配的節點)。還要描述你得到的結果和你的期望。因爲這個問題沒有包含足夠的信息來幫助你。 – Richard 2010-10-27 09:43:32

+0

好吧編輯它 – Sandor 2010-10-27 09:52:59

+0

好問題,+1。請參閱我的回答以獲取解釋和完整解決方案。 :) – 2010-10-27 12:47:41

回答

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

這將選擇所有前兩個之間的data/resorts/entry元素,也有recommended屬性與價值'Yes'

但是你要

​​

這個表達式首先指定所有data/resorts/entry元素,然後將它們限制只有那些位置在已經獲得的節點列表小於6

還記得position()功能是上下文相關的,它不能自由移動一個表達而不改變其含義!

+0

+1很好的答案。 – 2010-10-27 15:03:11

+0

感謝Dimitre的解釋和解決方案!像現在的魅力一樣工作。 – Sandor 2010-10-28 02:12:44

0

既然你沒有提供一些示例數據但我只能假設,recommended<entry />屬性。在這種情況下,你需要有@recommended在你的SELECT語句:

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