Hi Mukul,
Yes - I want to apply the stylesheet to the XML in stations.xml and
dataloggers.xml. As I understand it, if you want to process more than
one XML file at a time, you need to have a 'feeder' XML file that
lists all the XML files you want to transform.
So, I have information in two XML files:
stations.xml
dataloggers.xml
These are listed in feeder.xml, which is then processed by Saxon:
saxon -o output.xml -s feeder.xml convert.xsl
I had already listed the contents of feeder.xml in my original email.
Here it is again:
feeder.xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<sources>
<source href="stations.xml" />
<source href="dataloggers.xml" />
</sources>
Thanks for any help.
Kind regards,
- Rob
On Jul 19, 2008, at 8:59 PM, Mukul Gandhi wrote:
From your stylesheet, it seems, you apply the stylesheet to the XML,
stations.xml (and use other XML files as inputs in between). Is this
what you want to do?
But from your problem description, it seems, you will want to process
the file, feeder.xml from the stylesheet (and take other XMLs as
input) and produce the final output. Is this true?
Also could you please tell the structure of the file, feeder.xml for
multiple scenario (as you said, "so my xsl processor can convert more
than one xml file at a time").
On Sun, Jul 20, 2008 at 6:54 AM, Rob Newman <rlnewman(_at_)ucsd(_dot_)edu>
wrote:
Hi there,
My XSLT processor is Saxon v.9. I have an xml file of a list of
station
names:
stations.xml:
<station_list>
<stations>
<station name="MONP">
<station name="MONP2">
<station name="PFO">
</stations>
<station_list>
In another xml file I have a series of values associated with a
particular
station name (although now the tag is <datalogger>):
dataloggers.xml:
<dataloggerlist>
<datalogger name="MONP">
<con>sleeping</con>
<dlt>280594.003</dlt>
<rtm>-280553.133</rtm>
</datalogger>
<datalogger name="MONP2">
<con>sleeping</con>
<dlt>334455.003</dlt>
<rtm>-483940.133</rtm>
</datalogger>
<datalogger name="PFO">
<con>awake</con>
<dlt>111111.003</dlt>
<rtm>-222222.133</rtm>
</datalogger>
<dataloggerlist>
These are in turn defined in a third xml file (so my xsl processor
can
convert more than one xml file at a time):
feeder.xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<sources>
<source href="stations.xml" />
<source href="dataloggers.xml" />
</sources>
I want to combine them together so that the output looks like the
code below
(Aside: I am aware that the station name could be retrieved from
datalogger.xml <datalogger name="XXX">, however I am retrieving a
whole
suite of other information that is unique to stations.xml and not
pertinent
to this issue):
output.xml:
<Placemark>
<name>MONP</name>
<con>sleeping</con>
<dlt>280594.003</dlt>
<rtm>-280553.133</rtm>
</Placemark>
<Placemark>
<name>MONP2</name>
<con>sleeping</con>
<dlt>334455.003</dlt>
<rtm>-483940.133</rtm>
</Placemark>
<Placemark>
<name>PFO</name>
<con>awake</con>
<dlt>111111.003</dlt>
<rtm>-222222.133</rtm>
</Placemark>
Where name is derived from stations.xml. To get the con, dlt and
rtm values
from dataloggers.xml into output.xml I have done the following,
although I
am not sure this is close to being right:
(1) Open up stations.xml, and using templates I get the value of
the station
name into a variable called $thisSta
(2) Using the value of $thisSta, I then search for the datalogger
tag that
has a name attribute that matches $thisSta.
(3) Now I have isolated the station I am interested in from
dataloggers.xml
I want to grab some values (con, dlt, rtm).
snippet of convert.xsl where I am trying to achieve this:
<xsl:template match="station">
<Placemark>
<xsl:variable name="thisSta"><xsl:value-of select="@name"
/></xsl:variable>
<name><xsl:value-of select="$thisSta" /></name>
<xsl:template match="document( sources/source/@href,
.)/dataloggerlist/datalogger/@name=$thisSta">
<con><xsl:value-of select="con" /></con>
<dlt><xsl:value-of select="dlt" /></dlt>
<rtm><xsl:value-of select="rtm" /></rtm>
</xsl:template>
<Placemark>
</xsl:template>
When I try and process with Saxon, I get the following output:
Error at xsl:template on line 102 of file:convert.xsl:
XTSE0340: XSLT Pattern syntax error at char 0 on line 102 in
{document(
sources}:
The only functions allowed in a pattern are id() and key()
The error is the second template match statement. I think I am
pretty close
to getting this working, but I have run out of ideas. Can you do
what I am
trying to achieve, or is my XPath expression syntax just poorly
written?
Thanks in advance,
- Rob
--~------------------------------------------------------------------
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>
--~--