xsl-list
[Top] [All Lists]

RE: create new xml with xsl

2003-02-07 06:56:14
You are trying to create a pipeline of two transformations. You can
either do this with one stylesheet, or with two. 

If you do it with two, you will need some kind of scripting environment
(e.g. a Java or VB application, or just a shell script) to feed the
result of the first transformation as input to the second.

If you want to do it with a single stylesheet, the design pattern is:


<xsl:variable name="temp">
  <xsl:apply-templates select="/" mode="phase1"/>
</xsl:variable>

<xsl:template match="/">
  <xsl:apply-templates select="xx:node-set($temp)" mode="phase2"/>
</xsl:template>

and then you have to label all the template rules for each
transformation phase as mode="phase1" or mode="phase2". xx:node-set() is
your vendor's extension function to convert a temporary tree to a
node-set - all processors offer this, but the name varies.

Saxon offers a third approach, you can use two stylesheets, and pipe the
output of the first into the second using <xsl:output
saxon:next-in-chain="stylesheet2.xsl"/>

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
jandra x
Sent: 07 February 2003 12:12
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] create new xml with xsl


Hi everybody! I have this project for my school and i cant 
seem to find any 
good solution. I searched the list but nothing seems to help me 
exactly...What i want to do is to create a new xml document 
from an original 
one using a simple xsl and then reuse this xml to ctreate another xml 
document with another xsl. Everything should be the simplest 
possible. I 
cant seem to work the combination of these xsl's.

My original xml document includes clients from different 
countries.At first 
i want to create anew xml doc which will have onlyclients 
from USA and then 
a new xml doc which will have only those from ny. Assume that 
USA=1 and 
ny=11(all the other countries have different numbers..)

For example this is a part from my original xml:

<client>
  <fname>george</name>
  <lastname>qwerty</lastname>
  <address>1</address>
  <region>12</region>
  <email>hotmail</email>
  <phone>200897456</phone>
</client>

<client>
  <fname>george</name>
  <lastname>liberty</lastname>
  <address>1</address>
  <region>14</region>
  <email>hotmail</email>
  <phone>20084457456</phone>
</client>

<client>
  <fname>nick</name>
  <lastname>klipd</lastname>
  <address>1</address>
  <region>19</region>
  <email>hotmail</email>
  <phone>200855</phone>
</client>

<client>
  <fname>alex</name>
  <lastname>poly</lastname>
  <address>1</address>
  <region>11</region>
  <email>hotmail</email>
  <phone>20013131</phone>
</client>

<client>
  <fname>owen</name>
  <lastname>nitro</lastname>
  <address>7</address>
  <region>71</region>
  <email>yahoo</email>
  <phone>8003698</phone>
</client>

<client>
  <fname>what</name>
  <lastname>who</lastname>
  <address>7</address>
  <region>78</region>
  <email>yahoo</email>
  <phone>98</phone>
</client>

<client>
  <fname>owen</name>
  <lastname>bishop</lastname>
  <address>7</address>
  <region>76</region>
  <email>yahoo</email>
  <phone>800</phone>
</client>
etc....

So with my first xsl i wnat to create this sort of xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="8.xsl"?>
<wow>
<client>
  <fname>george</name>
  <lastname>qwerty</lastname>
  <address>1</address>
  <region>12</region>
  <email>hotmail</email>
  <phone>200897456</phone>
</client>

<client>
  <fname>george</name>
  <lastname>liberty</lastname>
  <address>1</address>
  <region>14</region>
  <email>hotmail</email>
  <phone>20084457456</phone>
</client>

<client>
  <fname>nick</name>
  <lastname>klipd</lastname>
  <address>1</address>
  <region>19</region>
  <email>hotmail</email>
  <phone>200855</phone>
</client>

<client>
  <fname>alex</name>
  <lastname>poly</lastname>
  <address>1</address>
  <region>11</region>
  <email>hotmail</email>
  <phone>20013131</phone>
</client>
</wow>

and then with the second xsl this xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="8.xsl"?>
<wow>
<client>
  <fname>alex</name>
  <lastname>poly</lastname>
  <address>1</address>
  <region>11</region>
  <email>hotmail</email>
  <phone>20013131</phone>
</client>
</wow>
....

what i cant achieve is to cobine the two xsl files.import or 
include dont 
seem to work. i use if to take only the clients from usa and 
then copy-of 
select to create the new tree with them and then in the 
different xsl the 
same idea to take the nyorkers.
The code is something like this:

<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";  
version="1.0"> <xsl:output method="xml" indent="yes"/> 
<xsl:template match="/"> <xsl:apply-templates/> 
</xsl:template> <xsl:template match="clients"> <xsl:if 
test="address='1'"> <xsl:element name="client">
     <xsl:element name="fname"><xsl:copy-of 
select="./fname"/></xsl:element>
     <xsl:element name="lastname"><xsl:copy-of 
select="./lastname"/></xsl:element>
     <xsl:element name="address"><xsl:copy-of 
select="./address"/></xsl:element>
     <xsl:element name="region"><xsl:copy-of 
select="./region"/></xsl:element>
     <xsl:element name="email"><xsl:copy-of 
select="./email"/></xsl:element>
     <xsl:element name="phone"><xsl:copy-of 
select="./phone"/></xsl:element> </xsl:element> </xsl:if> 
</xsl:template> </xsl:stylesheet>

(**if this is my correct file..:)
But i cant combined them into one.What should i do with the 
xml file so that 
it will see first the first xsl and then the second???? This 
is exactly what 
my professor wants. He wants us to create 2 diferrent xsl's 
and to apply 
them somehow to the xml file and the output of the first to 
go as input to 
the second ant thus create the last xml file.
I'm stuck.Do i have to use java as i've seen in some other 
messages in the 
list??
PLEASEEEEEEE anyone outthere?
Thank u in advance and sorry for the huge msg..

_________________________________________________________________
STOP MORE SPAM with the new MSN 8 and get 2 months FREE* 
http://join.msn.com/?page=features/junkmail


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>