2011-06-09 118 views
1

我知道有類似,更復雜的帖子,但我不能得到這個簡單的事情工作。我有一個非常簡單的XSLT循環,我只需要運行5次。而已。循環xslt模板

這是我有:

<xsl:template match="/"> 
    <div id="container"> 
    <xsl:for-each select="$currentPage/myItems/data/item"> 
     <img src="image.gif" /> 
    </xsl:for-each> 
    </div> 
</xsl:template> 

這工作得很好,我只需要循環這一部分:

<xsl:for-each select="$currentPage/myItems/data/item"> 
     <img src="image.gif" /> 
    </xsl:for-each> 

五倍以上,從而使輸出真的只是重複5次。我不想僅僅複製並粘貼五次(雖然這確實有效),因爲必須有更好的方法來處理它。

任何人都可以在正確的方向指向我嗎?謝謝!

回答

1

XSLT中唯一的命令式循環結構是for-each,但它循環輸入文檔中的節點。如果您不想使用遞歸實現,請將循環的內部放在命名模板中,然後使用五次來調用它。

喜歡的東西:

<xsl:template name='inside-loop'> 
    <xsl:for-each select="$currentPage/myItems/data/item"> 
    <img src="image.gif" /> 
    </xsl:for-each> 
</xsl:template> 

,然後要調用此:

<xsl:call-template name='inside-loop' /> 
+0

這就是我一直在嘗試,但我不能讓我的頭繞過XSLT,沒有我試過的東西。這一定非常簡單,但我錯過了沿線的某個地方。 – Dan 2011-06-09 14:15:54

+0

@Dan:oops,它是'call-template',也被擴展了。 – Richard 2011-06-09 14:27:38

+0

謝謝 - 所以我不能把放到一個循環中 - 我實際上只需要粘貼5次? – Dan 2011-06-09 14:37:52

2

技術上,XSLT是用於改造數據;循環預定次數會更符合的數據。不幸的是,適當的方法是複製並粘貼5次。

另外,你可能花更多的時間在問這個問題比它會採取複製和粘貼:)

1

很抱歉,但有什麼用區別:

<xsl:template match="/"> 
    <div id="container"> 
    <xsl:for-each select="$currentPage/myItems/data/item"> 
     <img src="image.gif" /> 
     <img src="image.gif" /> 
     <img src="image.gif" /> 
     <img src="image.gif" /> 
     <img src="image.gif" /> 
    </xsl:for-each> 
    </div> 
</xsl:template> 

,或者更好的:

<xsl:template match="/"> 
    <div id="container"> 
     <xsl:apply-templates select="$currentPage/myItems/data/item" mode="image"/> 
    </div> 
</xsl:template> 

<xsl:template match="item" mode="image"> 
    <img src="image.gif" /> 
    <img src="image.gif" /> 
    <img src="image.gif" /> 
    <img src="image.gif" /> 
    <img src="image.gif" /> 
</xsl:template> 
1

在XSLT 2.0,你可以這樣做:

<xsl:for-each select="1 to $n"> 
    .... 
</xsl:for-each> 

在1.0中,您可以選擇:您可以使用遞歸(模板調用自身將計數作爲參數傳遞,並在計數降至零時終止);或者您可以使用的解決方法

<xsl:for-each select="(//node())[position() &lt;= $n]"> 

只要在文檔中超過$ n個節點。

當然,正如其他人指出的那樣,如果$ n總是永遠是5,那麼您可以複製5次代碼。