XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
JJJ JJJSubject: convert XML to XML via XSLT
Author: JJJ JJJ
Date: 21 Oct 2005 10:53 AM
Hi
I am trying to convert 1 XML file into another.
For example, I need to convert:
<aa>
<a>
<nameid>123</nameid>
<dob>2005-10-10</dob>
</a>
</aa>
<bb>
<b>
<nameid>123</nameid>
<address>blah</address>
</b>
</bb>

INTO

<aa>
<a>
<nameid>123</nameid>
<dob>2005-10-10</dob>
<address>blah</address>
</a>
</aa>

So every time the element bb or b occurs, I need to transform some of its data as it it was an occurrence of the aa and a elements.
I have tried doing this in the mapper on Stylus but on adding an XSLT for-each instruction i get the error "Target node already has a control link".
DO you know of a way rund this or the actual XSLT code?
Many thanks.

Postnext
(Deleted User) Subject: convert XML to XML via XSLT
Author: (Deleted User)
Date: 21 Oct 2005 11:38 AM
Assuming that element <bb> from which you want to extract additional info is a next sibling of element <aa> something like this will do it:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:for-each select="//xml/aa">
<aa>
<a>
<xsl:copy-of select="a/nameid"/>
<xsl:copy-of select="a/dob"/>
<xsl:apply-templates select="following-sibling::bb"/>
</a>
</aa>
</xsl:for-each>
</xsl:template>

<xsl:template match="bb">
<xsl:copy-of select="b/address"/>
</xsl:template>
</xsl:stylesheet>

if you'd like to match <a> and <b> based on the value of <nameid> XSLT will be different. Let us know if this is the case - we will post example which will handle this too.

Postnext
JJJ JJJSubject: convert XML to XML via XSLT
Author: JJJ JJJ
Date: 21 Oct 2005 12:19 PM
Hi - thanks for the feedback.
It's more like each time the <b> element occurs, I need to create another <a> element with any of the tags in <b>

So if this occurs
<b>
<nameid>123</nameid>
<address>string</address>
</b>

then I need to create
<a>
<nameid>123</nameid>
<address>string</address>
</a>

before actually closing off the <aa> element with </aa>

<bb> would then not be used in the new XML file at all.



Postnext
(Deleted User) Subject: convert XML to XML via XSLT
Author: (Deleted User)
Date: 21 Oct 2005 12:36 PM
How about this:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xml>
<xsl:apply-templates select="*"/>
</xml>
</xsl:template>

<xsl:template match="aa">
<xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="b">
<aa>
<a>
<xsl:copy-of select="*"/>
</a>
</aa>
</xsl:template>
</xsl:stylesheet>

Postnext
JJJ JJJSubject: convert XML to XML via XSLT
Author: JJJ JJJ
Date: 24 Oct 2005 05:19 AM
Sorry - still lost. Let's use some proper names so that it's abit easier to understand. At the moment I have this code:

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="delta">
<mainelement>
<xsl:for-each select="candidates">
<candidates>
<xsl:for-each select="candidate">
<candidate>
<empid>
<xsl:value-of select="empid"/>
</empid>
<firstname>
<xsl:value-of select="firstname"/>
</firstname>
<lastname>
<xsl:value-of select="lastname"/>
</lastname>
</candidate>
</xsl:for-each>
</candidates>
</xsl:for-each>
</mainelement>
</xsl:for-each>
</xsl:template>
<xsl:template match="canvat">
<empid>
<xsl:value-of select="empid"/>
</empid>
<companynumber>
<xsl:value-of select="companynumber"/>
</companynumber>
<vatnumber>
<xsl:value-of select="vatnumber"/>
</vatnumber>
</xsl:template>
</xsl:stylesheet>

Now, just under where the </candidate> occurs I need to apply a loop so that for each time the <canvat> element occurs it instead creates a new <candidate> element.

Many thanks.

Postnext
JJJ JJJSubject: convert XML to XML via XSLT
Author: JJJ JJJ
Date: 24 Oct 2005 07:06 AM
Originally Posted: 24 Oct 2005 07:05 AM
I have done the following and it seemed to work... ... </candidate> </xsl:for-each> <xsl:for-each select="../canvats/canvat"> <candidate> <empid> <xsl:value-of select="empid"/> </empid> <companynumber> <xsl:value-of select="companynumber"/> </companynumber> <vatnumber> <xsl:value-of select="vatnumber"/> </vatnumber> </candidate> </xsl:for-each> </candidates> Are there any potential problems with this or is the solution okay?<br> Thanks.

Posttop
JJJ JJJSubject: convert XML to XML via XSLT
Author: JJJ JJJ
Date: 24 Oct 2005 07:06 AM
I have done the following and it seemed to work...

...
</candidate>
</xsl:for-each>
<xsl:for-each select="../canvats/canvat">
<candidate>
<empid>
<xsl:value-of select="empid"/>
</empid>
<companynumber>
<xsl:value-of select="companynumber"/>
</companynumber>
<vatnumber>
<xsl:value-of select="vatnumber"/>
</vatnumber>
</candidate>
</xsl:for-each>
</candidates>

Are there any potential problems with this or is the solution okay?<br>
Thanks.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.