RE: [xsl] Recursive wrapping

Subject: RE: [xsl] Recursive wrapping
From: "Khorasani, Houman" <Houman.Khorasani@xxxxxxxxxxxx>
Date: Thu, 20 Jul 2006 11:33:31 +0100
I found the error. It was my mistake. I forgot to change <xsl:template
match="/root"> to <xsl:template match="/"> in order to make it work with
my real input file.

Now your solution is working perfectly fine. :)

Thanks
Houman


-----Original Message-----
From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
Sent: 20 July 2006 10:54
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Recursive wrapping

Could you please post the input XML you tried and your desired output.

Regards,
Mukul

On 7/20/06, Khorasani, Houman <Houman.Khorasani@xxxxxxxxxxxx> wrote:
> Hi Ghandi,
>
> Sorry for late response.  This might be a nice alternative solution to
> the one from George.  I tested it but for some reason, I get only the
> values in the output without the xml tags.
>
> Regards
> Houman
>
>
> -----Original Message-----
> From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
> Sent: 13 July 2006 17:16
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Recursive wrapping
>
> Hi Houman,
>   This is an example of positional grouping.
>
> Following is one solution to this problem:
>
> <?xml version="1.0" encoding="utf-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> version="1.0">
>
>  <xsl:output method="xml" indent="yes" />
>
>  <xsl:template match="/root">
>    <root>
>      <xsl:for-each select="*">
>        <xsl:choose>
>          <xsl:when test="not(self::Attribute)">
>            <xsl:copy-of select="." />
>          </xsl:when>
>          <xsl:when
test="not(preceding-sibling::*[1]/self::Attribute)">
>            <OtherAttributes>
>               <xsl:copy-of select="." />
>               <xsl:call-template name="MakeGroup">
>                 <xsl:with-param name="nodeset"
> select="following-sibling::*" />
>               </xsl:call-template>
>            </OtherAttributes>
>          </xsl:when>
>        </xsl:choose>
>      </xsl:for-each>
>    </root>
>  </xsl:template>
>
>  <xsl:template name="MakeGroup">
>    <xsl:param name="nodeset" />
>
>    <xsl:if test="$nodeset[1]/self::Attribute">
>      <xsl:copy-of select="$nodeset[1]" />
>      <xsl:call-template name="MakeGroup">
>        <xsl:with-param name="nodeset" select="$nodeset[position() &gt;
> 1]" />
>      </xsl:call-template>
>    </xsl:if>
>  </xsl:template>
>
> </xsl:stylesheet>
>
> For e.g., when the above stylesheet is applied to XML:
>
> <root>
>  <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>
> </root>
>
> The following output is produced:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
>   <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>
> </root>
>
> Regards,
> Mukul
>
> On 7/13/06, Khorasani, Houman <Houman.Khorasani@xxxxxxxxxxxx> 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