我有一系列节点,它们是父节点的直接子节点,我想在这些节点上循环,但是将它们包含在4个"组"中...我可能没有非常清楚地写这个,所以这可能会有所帮助;
<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>
..and so on
Run Code Online (Sandbox Code Playgroud)
目标
<div class="group">
<span class="child01">@nodename</span>
<span class="child02">@nodename</span>
<span class="child03">@nodename</span>
<span class="child04">@nodename</span>
</div>
<div class="group">
<span class="child05">@nodename</span>
<span class="child06">@nodename</span>
<span class="child07">@nodename</span>
<span class="child08">@nodename</span>
</div>
<div class="group">
..
<span class="child32">@nodename</span>
</div>
<div class="group">
<span class="child33">@nodename</span>
..and so on
Run Code Online (Sandbox Code Playgroud)
我尝试过这个想法的变体 - 将数据包装在开放和关闭组标签中,每隔四个循环放入一个新的关闭/打开对
<div class="group">
<xsl:for-each select="$currentPage/*">
<span>
<xsl:value-of select="@nodeName" />
</span>
<!--
=============================================================
After very 4th item
=============================================================
-->
<xsl:if test="position() mod 4 = 0">
<xsl:text></div><div class="page"></xsl:text>
</xsl:if>
</xsl:for-each>
</div>
Run Code Online (Sandbox Code Playgroud)
但基本上似乎XSLT不会让我从关闭无法匹配的标签开始到目前为止我发现的clkoset解决方案是jquery中的'修复' 包围每三个div的div但我宁愿不依赖于javascript来格式化页面.
这种转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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:template>
<xsl:template match="span">
<div>
<xsl:copy-of select=
".|following-sibling::span[not(position() > $pNumCols -1)]"/>
</div>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当应用于提供的XML文档时:
<t>
<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>
Run Code Online (Sandbox Code Playgroud)
产生想要的结果:
<div>
<span class="child01">@nodename</span>
<span class="child02">@nodename</span>
<span class="child03">@nodename</span>
</div>
<div>
<span class="child04">@nodename</span>
<span class="child05">@nodename</span>
<span class="child06">@nodename</span>
</div>
<div>
<span class="child07">@nodename</span>
<span class="child08">@nodename</span>
<span class="child32">@nodename</span>
</div>
<div>
<span class="child33">@nodename</span>
</div>
Run Code Online (Sandbox Code Playgroud)