RE: [xsl] Recursive wrapping

Subject: RE: [xsl] Recursive wrapping
From: "Khorasani, Houman" <Houman.Khorasani@xxxxxxxxxxxx>
Date: Thu, 13 Jul 2006 16:52:59 +0100
All I can say to this solution is WOW.  I have to work harder on my
recursive template understanding. I would need a while to analyze your
solution but its working!!!

Many many thanks,
Houman



-----Original Message-----
From: George Cristian Bina [mailto:george@xxxxxxxxxxxxx]
Sent: 13 July 2006 16:50
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Recursive wrapping

Something like below perhaps?

<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="Attribute">
     <OtherAttributes>
       <xsl:copy>
         <xsl:apply-templates select="node() | @*"/>
       </xsl:copy>
       <xsl:apply-templates
select="following-sibling::*[1][self::Attribute]" mode="att"/>
     </OtherAttributes>
   </xsl:template>
   <xsl:template
match="Attribute[preceding-sibling::*[1][self::Attribute]]"/>

   <xsl:template match="Attribute" mode="att">
       <xsl:copy>
         <xsl:apply-templates select="node() | @*"/>
       </xsl:copy>
       <xsl:apply-templates
select="following-sibling::*[1][self::Attribute]" mode="att"/>
   </xsl:template>

   <xsl:template match="node() | @*" mode="att">
     <xsl:copy>
       <xsl:apply-templates select="node() | @*"/>
     </xsl:copy>
   </xsl:template>

</xsl:stylesheet>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


Khorasani, Houman wrote:
> Hi,
>
> I have a problem, which should be quite straight forward but I can't
> find the solution.
>
>
> XML:
>
> <a>1</a>
> <b>2</b>
> <Attribute>
> 	<Name>xx</Name>
> 	<Value>xx</Value>
> </Attribute>
> <Attribute>
> 	<Name>yy </Name>
> 	<Value>yy</Value>
> </Attribute>
> ...
> <c>3</c>
>
>
>
> Would like to generate:
> <a>1</a>
> <b>2</b>
> <OtherAttributes>
> 	<Attribute>
> 		<Name>xx</Name>
> 		<Value>xx</Value>
> 	</Attribute>
> 	<Attribute>
> 		<Name>yy </Name>
> 		<Value>yy</Value>
> 	</Attribute>
> 	...
> </OtherAttributes>
> <c>3</c>
>
> There could be 0 to n attribute elements and I would like to wrap them
> between an OtherAttributes.
>
> I have tried to solve it by recursive templates, but somehow I don't
get
> there.  Any suggestions?
>
> Many thanks
> Houman

Current Thread