Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > XSLT transformaton (result XML shld be in same sequence always...

Reply
Thread Tools

XSLT transformaton (result XML shld be in same sequence always...

 
 
ravi.velamuri@gmail.com
Guest
Posts: n/a
 
      02-25-2006
Hi,

1. My source XML will almost look like attached "Source.XML"

2. I have to transform that into Destination XML almost look like
attached"Dest.xml"

Here, my destination XML should be always in the same sequence of
elements as it is in sample shown whatever way the Source XML
comes...OR XSL transforms it...

Please advice how to I achieve it...One rude way is write for each
Column Details one For loop...which is worst, I know in all ways.

Your early advice will help me a lot. (let me know if any further
clarification required on my prob).

Ravi Velamuri.

Source.xml:

<?xml version="1.0"?>
<TEST xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:///d:sample.xsd">
<Table_Info>
<Table_Name>TBLGS_COUNTRY</Table_Name>
<Operation_Type>I</Operation_Type>
<Prev_Seq>190952</Prev_Seq>
<Curr_Seq/>
</Table_Info>
<Table_Data>
<Col_Details>
<Col_Name>GS_CURR</Col_Name>
<Col_Value>JPY</Col_Value>
</Col_Details>
<Col_Details>
<Col_Name>GS_CTRY_ABBR</Col_Name>
<Col_Value/>
</Col_Details>
<Col_Details>
<Col_Name>GS_CTRY</Col_Name>
<Col_Value>CTRY attribute</Col_Value>
</Col_Details>
<Col_Details>
<Col_Name>GS_CTRY_DES</Col_Name>
<Col_Value>JAPAN</Col_Value>
</Col_Details>
<Col_Details>
<Col_Name>BLB_ISO_CTRY</Col_Name>
<Col_Value>JP</Col_Value>
</Col_Details>
<Col_Details>
<Col_Name>BLB_ISO_CTRY_DES</Col_Name>
<Col_Value/>
</Col_Details>
<Col_Details>
<Col_Name>BLB_CDR_CTRY</Col_Name>
<Col_Value/>
</Col_Details>
</Table_Data>
<Error_Info>
<Error_Msg1/>
<Error_Msg2/>
</Error_Info>
</TEST>

XSL transform logic:

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform"
xmlns:abc="http://www.abc.com/xml"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance">
<xslutput method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template name="country">
<xsl:for-each select="TEST/Table_Data/Col_Details">
<xsl:if test="Col_Name = 'BLB_ISO_CTRY'">
<test:code>
<xsl:value-of select="Col_Value"/>
</test:code>
</xsl:if>
<xsl:if test="Col_Name= 'GS_CTRY_DES'">
<test:name>
<xsl:value-of select="Col_Value"/>
</test:name>
</xsl:if>

<xsl:if test="Col_Name = 'GS_REGION_CODE'">
<test:timezone>
<xsl:value-of select="Col_Value"/>
</test:timezone>
</xsl:if>
<xsl:if test="Col_Name = 'GS_CTRY'">
<attribute>
<test:name>
GS_CTRY
</test:name>
<test:value>
<xsl:value-of select="Col_Value"/>
</test:value>
</attribute>
</xsl:if>
<xsl:if test="Col_Name = 'GS_CURR'">
<attribute>
<test:name>
GS_CURR
</test:name>
<test:value>
<xsl:value-of select="Col_Value"/>
</test:value>
</attribute>
</xsl:if>
</xsl:for-each>
<test:enabled> true </test:enabled>
</xsl:template>
</xsl:stylesheet>



Dest.xml:

<?xml version="1.0" encoding="UTF-8"?>
<test:testDocument
xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlns:abc="http:/
/www.abc.com/xml">
<test:testObject test:type="TBLGS_COUNTRY" action="I">
<test:Attribute>
<test:name>GS_CTRY</test:name>
<test:value>949</test:value>
</test:Attribute>
<test:Attribute>
<test:name>GS_CURR</test:name>
<test:value/>
</test:Attribute>
<test:name/>
<test:code/>
<test:timezone/>
<test:enabled>true</test:enabled>
<test:activeFrom>1970-01-01+00:00</test:activeFrom>
<test:activeTo>2100-01-01+00:00</test:activeTo>
<test:holiday/>
</test:testObject>
</test:testDocument>

 
Reply With Quote
 
 
 
 
Crutcher Dunnavant
Guest
Posts: n/a
 
      02-26-2006
Please tell me, do you get to design the input language? If so, there
might be better things to do.

However, there are nicer ways to represent what you are doing now.

One is to use xsl:choose instead of a list of xsl:if elements. This
doesn't actually give you anything other than it looks nicer.

<xsl:choose>
<xsl:when test="Col_Name = 'BLB_ISO_CTRY'">
...
</xsl:when>
...
</xsl:choose>

Another, more modular approach is to use an apply templates. This lets
you import templates from other xsl files.

<xsl:apply-templates select="TEST/Table_Data/Col_Details"
mode="col_details"/>

and then have templates of the form:

<xsl:template match="Col_Name = 'BLB_ISO_CTRY'" mode="col_details">
...
</xsl:template>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
how to iterate over sequence and non-sequence ? stef mientki Python 13 10-20-2007 10:21 AM
Problem to insert an XML-element by XSLT-converting from one XML-file into another XML-file jkflens XML 2 05-30-2006 09:41 AM
Including XSLT/XML document within a XSLT document dar_imiro@hotmail.com XML 4 12-13-2005 02:26 AM
ANN: New low-cost XML Editor, XSLT Editor, XSLT Debugger, DTD/Schema Editor Stylus Studio Java 0 08-03-2004 03:53 PM
BOOT SEQUENCE (how to change boot sequence) bird Computer Support 13 12-24-2003 02:20 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57