On 10/2/06, Mario Madunic <hajduk(_at_)imag(_dot_)net> wrote:
Can't seem to get the results I want using for-each-group
Using Saxon 8 and XSLT 2
Sample doc
<root>
<body>
<heading>
<p></p>
<p></p>
<li></li>
<div>
<p></p>
<p></p>
</div>
<li></li>
<div>
<p></p>
<p></p>
<p></p>
<p></p>
</div>
<li></li>
<div>
<p></p>
<p></p>
</div>
<p></p>
<p></p>
<footer></footer>
<body>
</root>
I want it to look like the following
<root>
<body>
<heading>
<p></p>
<p></p>
<li>
<div>
<p></p>
<p></p>
</div>
</li>
<li>
<div>
<p></p>
<p></p>
<p></p>
<p></p>
</div>
</li>
<li>
<div>
<p></p>
<p></p>
</div>
</li>
<p></p>
<p></p>
<footer></footer>
<body>
</root>
I've followed the example in MK's XSLT 2 book page # 297 and haven't achieved
the same results. I have a bunch of elements that this must be done to.
Firstly your samples aren't well-formed XML, which doesn't help. However...
you don't need grouping here, just a variation of the identity transform:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="heading">
<xsl:copy>
<xsl:apply-templates select="*[not(self::div)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="li">
<xsl:copy>
<xsl:apply-templates
select="following-sibling::*[1][self::div]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
produces:
<root>
<body>
<heading>
<p/>
<p/>
<li>
<div>
<p/>
<p/>
</div>
</li>
<li>
<div>
<p/>
<p/>
<p/>
<p/>
</div>
</li>
<li>
<div>
<p/>
<p/>
</div>
</li>
<p/>
<p/>
</heading>
<footer/>
</body>
</root>
cheers
andrew
--~------------------------------------------------------------------
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>
--~--