由於無法使用模數,因此問題是將XAPT中的組包裝爲4。
Au contraire。 :)你想要的是mod operator
。此外,<xsl:for-each>
元素通常不是最可重用的方法;相反,請考慮使用更多可塑模板的解決方案。
當這個XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vNumOfElems" select="4"/>
<xsl:template match="/*">
<ul>
<xsl:apply-templates select="li[position() mod $vNumOfElems = 1]"/>
</ul>
</xsl:template>
<xsl:template match="li">
<div class="row">
<xsl:copy-of
select=".|following-sibling::li[not(position() > $vNumOfElems - 1)]"/>
</div>
</xsl:template>
</xsl:stylesheet>
......在反對提出的源XML應用:
<ul>
<li/>
<li/>
<li/>
<li/>
<li/>
<li/>
<li/>
<li/>
</ul>
......想要的結果(雖然它可能無法通過產生有效HTML的嗅探測試):
<ul>
<div class="row">
<li />
<li />
<li />
<li />
</div>
<div class="row">
<li />
<li />
<li />
<li />
</div>
</ul>
請注意使用變量 - $vNumOfElems
- 保存組中應包含的元素數量。這提供了便利。 下山的路,如果你需要,比方說,每<div>
3個<li>
元素,簡單地做出這樣的轉變:
<xsl:variable name="vNumOfElems" select="3" />
......再次提供了正確的結果:
<ul>
<div class="row">
<li />
<li />
<li />
</div>
<div class="row">
<li />
<li />
<li />
</div>
<div class="row">
<li />
<li />
</div>
</ul>
哇太棒了答案!我真的很感謝你給我講解的一些解釋和時間!這很好! – Eric 2013-04-10 13:10:59
@Eric - 我的榮幸;樂意效勞。 :) – ABach 2013-04-10 13:35:57