I want to turn this
<root>
<item columns="4"></item>
<item columns="8"></item>
<item columns="12"></item>
<item columns="4"></item>
<item columns="4"></item>
<item columns="4"></item>
<item columns="2"></item>
<item columns="10"></item>
</root>
into this
<root>
<row>
<item columns="4"></item>
<item columns="8"></item>
</row>
<row>
<item columns="12"></item>
</row>
<row>
<item columns="4"></item>
<item columns="4"></item>
<item columns="4"></item>
</row>
<row>
<item columns="2"></item>
<item columns="10"></item>
</row>
</root>
Here's an XSLT 2.0 solution:
Here a slightly shorter XSLT 1.0 version using
following-sibling
and an empty notest as default stack value (<xsl:param name="items" select="/@empty-node-set" />
).But basically same as michael.hor257k solution.
Using
/@empty-node-set
as empty stack was from Best practice regarding empty node-set initialization:Here's one way you could look at it:
XSLT 1.0
Do a search for sibling recursion for an alternative method.