M Balaji wrote:
How do I need to write the for-each-group element for the above condition?
Here is an attempt with a function:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xsd mf"
xmlns:mf="http://example.com/2009/mf"
version="2.0">
<xsl:output indent="yes"/>
<xsl:function name="mf:group-heading" as="element()*">
<xsl:param name="els" as="element()*"/>
<xsl:param name="level" as="xsd:integer"/>
<xsl:for-each-group select="$els"
group-starting-with="*[local-name() eq concat('h', $level)]">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
<xsl:sequence select="mf:group-heading(current-group() except
., $level + 1)"/>
</xsl:element>
</xsl:for-each-group>
</xsl:function>
<xsl:template match="root">
<xsl:copy>
<xsl:sequence select="mf:group-heading(*, 2)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
When applied to
<root>
<h2>testing</h2>
<p>data recovery, and application testing. </p>
<h4>Support for file system</h4>
<p>Objects for replication:</p>
<h3>Session</h3>
<p>Before creating sessions... </p>
<h3>Wizard</h3>
<p>In Manager, you can . </p>
<h4>Support for file system</h4>
<p>Objects for replication:</p>
<h2>testing1</h2>
</root>
Saxon 9 gives me
<root>
<h2>testing<p>data recovery, and application testing. <h4>Support
for file system<p>Objects for replication:</p>
</h4>
</p>
<h3>Session<p>Before creating sessions... </p>
</h3>
<h3>Wizard<p>In Manager, you can . </p>
<h4>Support for file system<p>Objects for replication:</p>
</h4>
</h3>
</h2>
<h2>testing1</h2>
</root>
which I think has the structure you want, you might need to tune the
whitespace/indentation.
--
Martin Honnen
http://msmvps.com/blogs/martin_honnen/
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--