You could try the following stylesheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/root">
<root>
<xsl:apply-templates select="a" />
</root>
</xsl:template>
<xsl:template match="a">
<xsl:if test="node()[1][not(self::b)]">
<a>
<xsl:apply-templates select="node()[1]" />
</a>
</xsl:if>
<xsl:copy-of select="b" />
<xsl:if test="b[following-sibling::node()]">
<a>
<xsl:copy-of select="b/following-sibling::node()" />
</a>
</xsl:if>
</xsl:template>
<xsl:template match="node()">
<xsl:copy-of select="." />
<xsl:apply-templates select="following-sibling::node()[1][not(self::b)]" />
</xsl:template>
</xsl:stylesheet>
Though I have tested it with Saxon 8.8J, it doesn't use any XSLT 2.0
specific syntax. It would work with a XSLT 1.0 processor as well.
This stylesheet uses the sibling recursion technique for positional
grouping. This was I think suggested by Michael Kay on the xsl-list.
On 9/29/06, alex v. <alex(_dot_)vett(_at_)gmail(_dot_)com> wrote:
The 'a' and 'b' are complex type, for example:
<root>
<a>mixed content <c>huuu</c> like text and tags
<b>other <d>mixed</d> content</b>
mixed <e>content</e> also here
</a>
</root>
As result I need to have:
<root>
<a>mixed content <c>huuu</c> like text and tags</a>
<b>other <d>mixed</d> content</b>
<a>mixed <e>content</e> also here</a>
</root>
Could you please help me with this example, to understand
how apply grouping with xslt2.
I use Saxon XSLT Processor.
~alex
2006/9/28, David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk>:
>
> Note xslt has no access to the tags in the original document, and can't
> directly generate any in the result.
>
> > a structure like this:
>
>
> it depends a bit how like is like, but
>
> <xsl:template match="*">
> <xsl:copy>
> <xsl:apply-templates/>
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="a">
> <xsl:apply-templates/>
> </xsl:template>
>
> <xsl:template match="a/text()">
> <a>
> <xsl:apply-templates/>
> </a>
> </xsl:template>
>
> would produce the output you show. In general though, if you need to
> group more than one node inside teh a elements, this is a "grouping"
> problem and you should use one of teh grouping idioms for xslt1 or
> xsl:for-each-group in xslt2.
>
> David
--
~alex
--
Regards,
Mukul Gandhi
--~------------------------------------------------------------------
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>
--~--