| Subject: Re: [xsl] move tag up to level From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Sat, 30 Sep 2006 21:23:48 +0530 | 
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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>
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.
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@xxxxxxxxx>: > > 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
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] move tag up to level, David Carlisle | Thread | [xsl] XPath for matching multiple c, Will McCutchen | 
| RE: [xsl] XPath for matching multip, Michael Kay | Date | [no subject], Unknown | 
| Month |