Subject: RE: RE: [xsl] merging generic elements in a parent-child relationship Part II From: "Matias Woloski" <woloski@xxxxxxxx> Date: Thu, 27 Jun 2002 18:21:37 -0300 |
thanks Dimitre! But is it possible to apply a unique stylesheet to the originial xml I've posted? Or I need to do this in two steps? this is the original one <root> <Persona id="abc" idCountry="1"/> <Persona id="abcd" idCountry="1"/> <b id="b1" idPersona="abc"/> <b id="b2" idPersona="abc"/> <b id="b3" idPersona="abcd"/> <c id="c1" idb="b1"/> </root> and this is my styleheet which do the original job. How do you insert the Muenchian method here? <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:param name="TopElement" select="'Persona'" /> <xsl:template match="root"> <root> <xsl:apply-templates select="/*/*[name() = $TopElement]"/> </root> </xsl:template> <xsl:template match="*"> <xsl:element name="{name()}"> <xsl:variable name="currentTag" select="name()"/> <xsl:copy-of select="@*"/> <xsl:apply-templates select="../*[@*[name()=concat('id',$currentTag)]=current()/@id]"/> </xsl:element> </xsl:template> </xsl:stylesheet> thanks a lot! Matias > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Dimitre > Novatchev > Sent: jueves, 27 de junio de 2002 17:26 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: RE: [xsl] merging generic elements in a parent-child > relationship Part II > > > --- "Matias Woloski" <woloski at sion dot com> wrote: > > > > > I've solved both problems! > > I did this for the param problem > > <xsl:apply-templates select="//*[name()=$TopElement]"/> > > so this will choose all the elements whose name is stored in > > TopElement > > and the id problem > > I added a variable currentTag > > <xsl:variable name="currentTag" select="name()"/> > > ... > > <xsl:apply-templates > > select="../*[@*[name()=concat('id',$currentTag)]=current()/@id]"/> > > > > But I have a question now... > > I have the XML transformed like this > > > > <?xml version="1.0" encoding="UTF-8"?> > > <root> > > <Persona id="abc" idCountry="1"> > > <b id="b1" idPersona="abc"></b> > > <b id="b2" idPersona="abc"></b> > > <c id="c1" idb="b1" idPersona="abc"> > > </c> > > </Persona> > > <Persona id="abcd" idCountry="1"> > > <b id="b3" idPersona="abcd"> > > </b> > > </Persona> > > </root> > > > > I want to wrap each collection of elements into other element. Like > > this > > > > <?xml version="1.0" encoding="UTF-8"?> > > <root> > > <PersonaGroup> > > <Persona id="abc" idCountry="1"> > > <bGroup> > > <b id="b1" idPersona="abc"></b> > > <b id="b2" idPersona="abc"></b> > > </bGroup> > > <cGroup> > > <c id="c1" idb="b1" idPersona="abc"></c> > > </cGroup> > > </Persona> > > <Persona id="abcd" idCountry="1"> > > <bGroup> > > <b id="b3" idPersona="abcd"></b> > > </bGroup> > > </Persona> > > </PersonaGroup> > > </root> > > > > thanks! > > > > ps: Dimitre thanks for answering... actually I've already solved it > > in > > a > > similar way... do you know the last question? > > > Yes, this is a grouping problem. Bellow I use the Muenchian method: > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:key name="kPers-Names" match="Persona/*" > use="concat(generate-id(..), '||', name())"/> > > <xsl:strip-space elements="*"/> > > <xsl:output omit-xml-declaration="yes" indent="yes"/> > > <xsl:template match="/"> > <root> > <xsl:apply-templates/> > </root> > </xsl:template> > > <xsl:template match="Persona"> > <xsl:copy> > <xsl:copy-of select="namespace::* | @*"/> > <xsl:for-each select="*[generate-id() > = > generate-id(key('kPers-Names', > concat(generate-id(..), > '||', > name() > ) > )[1])]"> > > <xsl:element name="{name()}Group"> > <xsl:copy-of select="key('kPers-Names', > concat(generate-id(..), > '||', > name() > ) > )"/> > </xsl:element> > </xsl:for-each> > </xsl:copy> > </xsl:template> > </xsl:stylesheet> > > When applied to your original source xml: > > <root> > <Persona id="abc" idCountry="1"> > <b id="b1" idPersona="abc"></b> > <b id="b2" idPersona="abc"></b> > <c id="c1" idb="b1" idPersona="abc"> > </c> > </Persona> > <Persona id="abcd" idCountry="1"> > <b id="b3" idPersona="abcd"> > </b> > </Persona> > </root> > > The result of the transformation is exactly as wanted: > > <root> > <Persona id="abc" idCountry="1"> > <bGroup> > <b id="b1" idPersona="abc"/> > <b id="b2" idPersona="abc"/> > </bGroup> > <cGroup> > <c id="c1" idb="b1" idPersona="abc"/> > </cGroup> > </Persona> > <Persona id="abcd" idCountry="1"> > <bGroup> > <b id="b3" idPersona="abcd"/> > </bGroup> > </Persona> > </root> > > > Cheers, > Dimitre Novatchev. > > > > __________________________________________________ > Do You Yahoo!? > Yahoo! - Official partner of 2002 FIFA World Cup > http://fifaworldcup.yahoo.com > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: RE: [xsl] merging generic eleme, Dimitre Novatchev | Thread | [xsl] Re: merging generic elements , Dimitre Novatchev |
Re: [xsl] Need attr="" in html..., David Carlisle | Date | Re: [xsl] Curved Table borders in X, J.Pietschmann |
Month |