Subject: [xsl] Re: node concatenation From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx> Date: Sat, 29 Mar 2003 23:16:51 +0100 |
Hi bix, Just use the Muenchian method. This transformation: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:key name="kEl" match="element" use="@name"/> <xsl:key name="kAttr" match="attribute" use="concat(../@name, '|', @name)"/> <xsl:key name="kchEl" match="element" use="concat(../@name, '|', @name)"/> <xsl:template match="/"> <els> <xsl:for-each select="//element[generate-id() = generate-id(key('kEl', @name)[1]) ]"> <element name="{@name}"> <xsl:for-each select="//attribute[generate-id() = generate-id(key('kAttr', concat(current()/@name, '|', @name ) )[1] ) ]"> <attribute name="{@name}"/> </xsl:for-each> <xsl:for-each select="//element[generate-id() = generate-id(key('kchEl', concat(current()/@name, '|', @name ) )[1] ) ]"> <elementRef name="{@name}"/> </xsl:for-each> </element> </xsl:for-each> </els> </xsl:template> </xsl:stylesheet> when applied on your source.xml: <els> <element name="a"> <attribute name="attA1"/> <attribute name="attA2"/> <element name="aa"> <attribute name="attAA1"/> <attribute name="attAA2"/> </element> </element> <element name="b" /> <element name="a"> <attribute name="attA3"/> <attribute name="attA4"/> <element name="ab"> <attribute name="attAB1"/> <attribute name="attAB2"/> <element name="aba"> <attribute name="attABA1"/> <attribute name="attABA2"/> <attribute name="attABA3"/> <attribute name="attABA4"/> </element> </element> </element> <element name="a"/> <element name="b"> <element name="ba"/></element> </els> Produces the wanted result: <els> <element name="a"> <attribute name="attA1"/> <attribute name="attA2"/> <attribute name="attA3"/> <attribute name="attA4"/> <elementRef name="aa"/> <elementRef name="ab"/> </element> <element name="aa"> <attribute name="attAA1"/> <attribute name="attAA2"/> </element> <element name="b"> <elementRef name="ba"/> </element> <element name="ab"> <attribute name="attAB1"/> <attribute name="attAB2"/> <elementRef name="aba"/> </element> <element name="aba"> <attribute name="attABA1"/> <attribute name="attABA2"/> <attribute name="attABA3"/> <attribute name="attABA4"/> </element> <element name="ba"/> </els> ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL "bix xslt" <bix_xslt@xxxxxxxxxxx> wrote in message news:F140yqZchMExMrLveu700037520@xxxxxxxxxxxxxx > All, > > I believe this may have been covered before with some of the grouping q/a's > but I did a few searches both on the fact and the archive, and I was unable > to find what I was looking for. > > Essentially, I've got something similar to the following: > ~~~~xml fragment~~~~ > <element name="a"> > <attribute name="attA1"/> > <attribute name="attA2"/> > <element name="aa"> > <attribute name="attAA1"/> > <attribute name="attAA2"/> > </element> > </element> > <element name="b" /> > <element name="a"> > <attribute name="attA3"/> > <attribute name="attA4"/> > <element name="ab"> > <attribute name="attAB1"/> > <attribute name="attAB2"/> > <element name="aba"> > <attribute name="attABA1"/> > <attribute name="attABA2"/> > <attribute name="attABA3"/> > <attribute name="attABA4"/> > </element> > </element> > </element> > <element name="a"/> > <element name="b"> > <element name="ba"/> > </element> > > I would like to combine all of the similar elements and reference the > element children into something like this: > ~~~ xml fragment output ~~~ > <element name="a"> > <attribute name="attA1"/> > <attribute name="attA2"/> > <attribute name="attA3"/> > <attribute name="attA4"/> > <elementRef name="aa"/> > <elementRef name="ab"/> > </element> > <element name="b"> > <elementRef name="ba"/> > </element> > <element name="aa"> > <attribute name="attAA1"/> > <attribute name="attAA2"/> > </element> > <element name="ab"> > <attribute name="attAB1"/> > <attribute name="attAB2"/> > <elementRef name="aba"> > </element> > ....etc > > I am attempting to come up with an automated way of storing off what the DTD > is of the xml data produced by my database. My hope is that I can transform > my original xml into this newer format (element/attribute), and then > transform that into a DTD file. I have an xsl file that works through all > of the original xml data and produces what you see above. However, I'm at a > loss how to group/concatenate the multiple data outputs. If there is a > better way to do this, I'd sure appreciate the help. > > Thanks! > bix > > > > > > _________________________________________________________________ > Add photos to your messages with MSN 8. Get 2 months FREE*. > http://join.msn.com/?page=features/featuredemail > > > 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 -> |
---|---|---|
[xsl] node concatenation, bix xslt | Thread | [xsl] newbie needs assistance gener, Ray Tayek |
RE: [xsl] simple matching problem, Michael Kay | Date | Re: [xsl] Empty spaces turn to %20, Peter Flynn |
Month |