興味深い質問です。私は少しのモジュラー算術を使用して、<xsl:key>
を使って3つの各グループを識別する以下の1つのソリューションを概説しました。
入力文書:
<TestDocument>
<Element>Alpha</Element>
<Element>Bravo</Element>
<Element>Charlie</Element>
<Element>Delta</Element>
<Element>Echo</Element>
<Element>Foxtrot</Element>
<Element>Golf</Element>
<Element>Hotel</Element>
</TestDocument>
スタイルシート:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<!-- Declare a key to identify each group of 3 elements -->
<xsl:key name="positionKey" match="/TestDocument/Element" use="floor((position() - 2) div 3)"/>
<xsl:template match="/TestDocument">
<html>
<!-- Iterate over the first element in each group -->
<xsl:for-each select="Element[(position() - 1) mod 3 = 0]">
<ul>
<!-- Grab all elements from this group -->
<xsl:apply-templates select="key('positionKey', position()-1)"/>
</ul>
</xsl:for-each>
</html>
</xsl:template>
<xsl:template match="Element">
<li><xsl:value-of select="."/></li>
</xsl:template>
</xsl:stylesheet>
結果:
<html>
<ul>
<li>Alpha</li>
<li>Bravo</li>
<li>Charlie</li>
</ul>
<ul>
<li>Delta</li>
<li>Echo</li>
<li>Foxtrot</li>
</ul>
<ul>
<li>Golf</li>
<li>Hotel</li>
</ul>
</html>