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(_dot_)gangula(_at_)wipro(_dot_)com 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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--