[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: RE: merging generic elements in a parent-child rel

Subject: RE: RE: merging generic elements in a parent-child relationship Part II
From: "Matias Woloski" <woloski@xxxxxxxx>
Date: Thu, 27 Jun 2002 18:21:37 -0300
matias last name original
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:  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2007 All Rights Reserved.