2012-06-27 65 views
0

我在解決如何在div中包含for-each的內容時遇到問題,其中每個div都包含4個元素。包裝一個for-each在div中的每個第n個元素

下面,你會發現我的XSLT得多的簡化版本:

<xsl:template match="/"> 
     <div class="container"><!-- have to be repeated for every 4 elements from the for-each --> 
      <xsl:for-each select="$currentPage/GalleriListe/descendant::* [@isDoc] [not(self::GalleriListe)]"> 
       <div>...</div> 
      </xsl:for-each> 
     </div> 
    </xsl:template> 

任何想法? 謝謝!

+0

測試這個問題是不是沒有源XML文檔的完整(但儘可能小)例如太有意義和準確的希望的結果。請編輯問題並添加這些必要的信息 - 不要強迫有意向的人猜測實際給出的內容以及實際需要的內容。 –

回答

1

你沒有發佈你的XML,所以我用這個答案簡化了一個。這有點古怪,可能會有更優雅的方式。您可以在this XMLPlayground session

<!-- declare how many items per container --> 
<xsl:variable name='num_per_div' select='4' /> 

<!-- root - kick things off --> 
<xsl:template match="/"> 
    <xsl:apply-templates select='root/node' mode='container' /> 
</xsl:template> 

<!-- iteration content - containers --> 
<xsl:template match='node' mode='container'> 
    <xsl:if test='position() = 1 or not((position()-1) mod $num_per_div)'> 
     <div> 
      <xsl:variable name='pos' select='position()' /> 
      <xsl:apply-templates select='. | following-sibling::*[count(preceding-sibling::node) &lt; $pos+(number($num_per_div)-1)]' /> 
     </div> 
    </xsl:if> 
</xsl:template> 

<!-- iteration content - individual items --> 
<xsl:template match='node'> 
    <p><xsl:value-of select='.' /></p> 
</xsl:template> 
+0

非常感謝您的回答。它幫助我在正確的方向:) – thilemann

相關問題