2013-10-22 141 views
0

我在我的XSLT中有一個for-each語句來檢查是否有多個產品圖像。如果多於一個然後顯示圖像。我需要另一個條件需要顯示4張圖片,可以在我的for-each語句中包含這個。現在我的for-each語句就像。for-each in XSLT for image

<xsl:for-each select="$extraimages/productimages/productimage[position() &gt; 1 and extension != '.pdf']"> 
    <li> 
     Something to do 
    </li> 
</xsl:for-each> 

回答

1

因此,您需要檢查是否有多個圖像。當有零或一個時,什麼都不顯示,當有多個時,顯示(最多)前四個?那麼怎麼樣

<xsl:if test="count($extraimages/productimages/productimage) &gt; 1"> 
    <xsl:for-each select="($extraimages/productimages/productimage)[position() &lt;= 4]"> 
    <li>something</li> 
    </xsl:for-each> 
</xsl:if> 

括號有所作爲,如果有一個以上的productimages元素$extraimages - 用括號你會得到不超過四個圖像,沒有他們,你會得到所有productimage元素是在其各自的productimages子元素的前四個productimage子元素內,其可能總共超過四個。

您還可以在你的榜樣的extension檢查中的問題,納入你會做這樣的事情

<xsl:if test="count($extraimages/productimages/productimage[extension != '.pdf']) &gt; 1"> 
    <xsl:for-each select="($extraimages/productimages/productimage[extension != '.pdf'])[position() &lt;= 4]"> 
    <li>something</li> 
    </xsl:for-each> 
</xsl:if> 

再次括號可能會或可能不會取決於$extraimages結構是必要的。

如果你想顯示的圖像2-5而不是1-4,那麼你不需要if,它只是變得

<xsl:for-each select=" 
     ($extraimages/productimages/productimage[extension != '.pdf']) 
     [position() &gt; 1][position() &lt;= 5]"> 
    <li>something</li> 
</xsl:for-each> 

因爲select將選擇什麼都沒有,如果有比少兩個非pdf圖像。

2

如果我明白正確:

<xsl:for-each select="$extraimages/productimages/productimage[position() &gt; 1 and position() &lt;= 5 and extension != '.pdf']"> 
    <li> 
     Something to do 
    </li> 
</xsl:for-each>