[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] XSLT to conver flat XML to Heirarchy XML
Subject: RE: [xsl] XSLT to conver flat XML to Heirarchy XML From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx> Date: Wed, 27 Apr 2005 02:51:44 -0700 (PDT) |
Please try this XSL.. <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/"> <xsl:element name="{//Record[1]/keyfieldValue}"> <xsl:copy-of select="//Record[1]/*[not(self::keyfieldValue)]" /> <xsl:element name="{//Record[2]/keyfieldValue}"> <xsl:copy-of select="//Record[2]/*[not(self::keyfieldValue)]" /> <xsl:call-template name="xyz"> <xsl:with-param name="x" select="//Record[3]" /> </xsl:call-template> <APPOINTMENT> <xsl:copy-of select="//Record[keyfieldValue = 'APPOINTMENT']/*" /> </APPOINTMENT> <xsl:for-each select="//Record[keyfieldValue = 'NAME']"> <NAME> <xsl:copy-of select="*" /> <ADDRESS> <xsl:copy-of select="following-sibling::Record[1]/*" /> </ADDRESS> </NAME> </xsl:for-each> </xsl:element> </xsl:element> </xsl:template> <xsl:template name="xyz"> <xsl:param name="x" /> <xsl:if test="$x and not($x/keyfieldValue = 'APPOINTMENT') and not($x/keyfieldValue = 'NAME') and not(($x/keyfieldValue = 'ADDRS') and ($x/preceding-sibling::Record[1]/keyfieldValue = 'NAME'))"> <xsl:element name="{$x/keyfieldValue}"> <xsl:copy-of select="$x/fieldValue" /> <xsl:call-template name="xyz"> <xsl:with-param name="x" select="$x/following-sibling::Record[1]" /> </xsl:call-template> </xsl:element> </xsl:if> </xsl:template> </xsl:stylesheet> I have slightly changed the syntax (as compared to my previous stylesheet).. I am now using <xsl:copy-of instead of xsl:for-each (for the syntactic convenience).. Also to simply things, I have removed the namespace declerations from source XML.. When the above stylesheet is applied to XML - <ns> <RECSETNAME> <Record> <keyfieldValue>HEADR</keyfieldValue> <fieldValue>CDJOB</fieldValue> <fieldValue>TRA</fieldValue> </Record> <Record> <keyfieldValue>TRANS</keyfieldValue> <fieldValue>DATA</fieldValue> <fieldValue>EXCHG</fieldValue> <fieldValue>EXCH</fieldValue> </Record> <Record> <keyfieldValue>MTPNT</keyfieldValue> <fieldValue>74842606</fieldValue> </Record> <Record> <keyfieldValue>ADDRS</keyfieldValue> <fieldValue>MTRPT</fieldValue> <fieldValue>BRITISH TELECOM</fieldValue> </Record> <Record> <keyfieldValue>ASSET</keyfieldValue> <fieldValue>INSTL</fieldValue> <fieldValue>METER</fieldValue> </Record> <Record> <keyfieldValue>METER</keyfieldValue> <fieldValue>T</fieldValue> </Record> <Record> <keyfieldValue>APPOINTMENT</keyfieldValue> <fieldValue>T</fieldValue> </Record> <Record> <keyfieldValue>NAME</keyfieldValue> <fieldValue>TEST</fieldValue> <fieldValue>BRITISH TELECOM</fieldValue> </Record> <Record> <keyfieldValue>ADDRS</keyfieldValue> <fieldValue>NAME</fieldValue> <fieldValue>BRITISH TELECOM</fieldValue> </Record> </RECSETNAME> </ns> The output recieved is - <?xml version="1.0" encoding="UTF-8"?> <HEADR> <fieldValue>CDJOB</fieldValue> <fieldValue>TRA</fieldValue> <TRANS> <fieldValue>DATA</fieldValue> <fieldValue>EXCHG</fieldValue> <fieldValue>EXCH</fieldValue> <MTPNT> <fieldValue>74842606</fieldValue> <ADDRS> <fieldValue>MTRPT</fieldValue> <fieldValue>BRITISH TELECOM</fieldValue> <ASSET> <fieldValue>INSTL</fieldValue> <fieldValue>METER</fieldValue> <METER> <fieldValue>T</fieldValue> </METER> </ASSET> </ADDRS> </MTPNT> <APPOINTMENT> <keyfieldValue>APPOINTMENT</keyfieldValue> <fieldValue>T</fieldValue> </APPOINTMENT> <NAME> <keyfieldValue>NAME</keyfieldValue> <fieldValue>TEST</fieldValue> <fieldValue>BRITISH TELECOM</fieldValue> <ADDRESS> <keyfieldValue>ADDRS</keyfieldValue> <fieldValue>NAME</fieldValue> <fieldValue>BRITISH TELECOM</fieldValue> </ADDRESS> </NAME> </TRANS> </HEADR> Regards, Mukul --- sreekanth.gangula@xxxxxxxxx wrote: > > Hi Mukul , > Thanks a lot. But I have got two more elements at > the end. > This requirement I got it a couple of hours ago. > I am just wondering whether is it possible. > Your help is really appreciated. Thanks in > adavnce. > <ns:MT_Test xmlns:ns="http://Centrica/Test"> > <RECSETNAME xmlns:ns="http://Centrica/Test"> > <Record> > <keyfieldValue>HEADR</keyfieldValue> > <fieldValue>CDJOB</fieldValue> > <fieldValue>TRA</fieldValue> > </Record> > <Record> > <keyfieldValue>TRANS</keyfieldValue> > <fieldValue>DATA</fieldValue> > <fieldValue>EXCHG</fieldValue> > <fieldValue>EXCH</fieldValue> > </Record> > <Record> > <keyfieldValue>MTPNT</keyfieldValue> > <fieldValue>74842606</fieldValue> > </Record> > <Record> > <keyfieldValue>ADDRS</keyfieldValue> > <fieldValue>MTRPT</fieldValue> > <fieldValue>BRITISH TELECOM</fieldValue> > </Record> > <Record> > <keyfieldValue>ASSET</keyfieldValue> > <fieldValue>INSTL</fieldValue> > <fieldValue>METER</fieldValue> > </Record> > <Record> > <keyfieldValue>METER</keyfieldValue> > <fieldValue>T</fieldValue> > </Record> > <Record> > <keyfieldValue>APPOINTMENT</keyfieldValue> > <fieldValue>T</fieldValue> > </Record> > <Record> > <keyfieldValue>NAME</keyfieldValue> > <fieldValue>TEST</fieldValue> > <fieldValue>BRITISH TELECOM</fieldValue> > </Record> > <Record> > <keyfieldValue>ADDRS</keyfieldValue> > <fieldValue>NAME</fieldValue> > <fieldValue>BRITISH TELECOM</fieldValue> > </Record> > </RECSETNAME> > </ns:MT_Test> > > The result of this looks like: > <?xml version="1.0" encoding="UTF-8"?> > <HEADR> > <fieldValue>CDJOB</fieldValue> > <fieldValue>TRA</fieldValue> > <TRANS> > <fieldValue>DATA</fieldValue> > <fieldValue>EXCHG</fieldValue> > <fieldValue>EXCH</fieldValue> > <MTPNT> > <fieldValue>74842606</fieldValue> > <ADDRS> > <fieldValue>MTRPT</fieldValue> > <fieldValue>BRITISH TELECOM</fieldValue> > <ASSET> > <fieldValue>INSTL</fieldValue> > <fieldValue>METER</fieldValue> > <METER> > <fieldValue>T</fieldValue> > </METER> > </ASSET> > </ADDRS> > </MTPNT> > <APPOINTMENT> > <keyfieldValue>APPOINTMENT</keyfieldValue> > <fieldValue>T</fieldValue> > </APPOINTMENT> > <NAME> > <keyfieldValue>NAME</keyfieldValue> > <fieldValue>TEST</fieldValue> > <fieldValue>BRITISH TELECOM</fieldValue> > <ADDRESS> > <keyfieldValue>ADDRS</keyfieldValue> > <fieldValue>NAME</fieldValue> > <fieldValue>BRITISH TELECOM</fieldValue> > </ADDRESS> > </NAME> > </TRANS> > </HEADR> __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] XSLT to conver flat XML t, sreekanth.gangula | Thread | [xsl] Performance benefit in using , Vishwajit Pantvaidya |
Re: [xsl] Should XSLT be used to ge, Jirka Kosek | Date | RE: [xsl] Getting useful data from , Michael Kay |
Month |
Keywords