I studied the solution for "XSLT split result in groups of 3" with interest. The elements in the cited example are all under one node. When I extended the example data to contain 2 branches of , like it is shown below,
<Root>
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
</nums>
<nums>
<num>11</num>
<num>12</num>
<num>13</num>
<num>14</num>
</nums>
</Root>
Using the adapted xslt as follows:
<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="pGroupSize" select="3"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Root/*">
<nums>
<xsl:apply-templates select=
"num[position() mod $pGroupSize = 1]"/>
</nums>
</xsl:template>
<xsl:template match="num">
<group>
<xsl:copy-of select=
".|following-sibling::*
[not(position() > $pGroupSize -1)]"/>
</group>
</xsl:template>
</xsl:stylesheet>
The output is as follows:
<Root>
<nums>
<group>
<num>01</num>
<num>02</num>
<num>03</num>
</group>
<group>
<num>04</num>
</group>
</nums>
<nums>
<group>
<num>11</num>
<num>12</num>
<num>13</num>
</group>
<group>
<num>14</num>
</group>
</nums>
</Root>
However, let's say the desired output should take the following form as shown below. How can this be done?
<Root>
<nums>
<group>
<num>01</num>
<num>02</num>
<num>03</num>
</group>
<group>
<num>04</num>
<num>11</num>
<num>12</num>
</group>
<group>
<num>13</num>
<num>14</num>
</group>
</nums>
</Root>
Thanks!