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() > > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Recursive wrapping, Khorasani, Houman | Thread | [xsl] iterate through attribute, Arthur Maloney |
[xsl] Dirty Input, Khorasani, Houman | Date | [xsl] directory listing extension, andrew welch |
Month |