XSLT For-Each 包装 div 中的每第 n 个项目 [英] XSLT For-Each Wrapping every nth item in a div
问题描述
我有一系列节点,它们是父节点的直接子节点我想遍历这些节点,但将它们包裹在 4 个组"中......我可能没有说清楚,所以这可能会有所帮助;
@nodename<span class="child02">@nodename</span><span class="child03">@nodename</span><span class="child04">@nodename</span><span class="child05">@nodename</span><span class="child06">@nodename</span><span class="child07">@nodename</span><span class="child08">@nodename</span>..<span class="child32">@nodename</span><span class="child33">@nodename</span>..等等
目标
<span class="child01">@nodename</span><span class="child02">@nodename</span><span class="child03">@nodename</span><span class="child04">@nodename</span><div class="group"><span class="child05">@nodename</span><span class="child06">@nodename</span><span class="child07">@nodename</span><span class="child08">@nodename</span>
<div class="group">..<span class="child32">@nodename</span>
<div class="group"><span class="child33">@nodename</span>..等等
我尝试了这个想法的变体 - 将批次包装在打开和关闭组标签中,每四个循环放入一个新的关闭/打开对
<xsl:for-each select="$currentPage/*"><跨度><xsl:value-of select="@nodeName"/></span><!--==============================================================在第四项之后==============================================================--><xsl:if test="position() mod 4 = 0"><xsl:text></div><div class="page"></xsl:text></xsl:if></xsl:for-each>
但本质上似乎 XSLT 不会让我从一个不匹配的结束标签开始到目前为止,我发现的 clkoset 解决方案是 jquery Wrapping a div 中的修复"大约每三个 div 但我宁愿不依赖 javascript 来格式化页面.
这种转变:
<xsl:output omit-xml-declaration="yes" indent="yes"/><xsl:strip-space elements="*"/><xsl:param name="pNumCols" select="3"/><xsl:template match="/*"><xsl:apply-templates select="span[position() mod $pNumCols = 1]"/></xsl:模板><xsl:template match="span"><div><xsl:copy-of select=".|following-sibling::span[not(position() > $pNumCols -1)]"/>
</xsl:模板></xsl:stylesheet>
应用于提供的 XML 文档时:
<span class="child01">@nodename</span><span class="child02">@nodename</span><span class="child03">@nodename</span><span class="child04">@nodename</span><span class="child05">@nodename</span><span class="child06">@nodename</span><span class="child07">@nodename</span><span class="child08">@nodename</span>..<span class="child32">@nodename</span><span class="child33">@nodename</span></t>
产生想要的结果:
<span class="child01">@nodename</span><span class="child02">@nodename</span><span class="child03">@nodename</span><div><span class="child04">@nodename</span><span class="child05">@nodename</span><span class="child06">@nodename</span>