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