By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,190 Members | 1,503 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,190 IT Pros & Developers. It's quick & easy.

eliminate hard-coded file names in xsl

P: n/a
I have an xsl stylesheet that merges data from two files based upon a
common date/time field. Right now, one of the file names is
hard-coded in the xsl file. Is there any way to make this parameter
driven so I can genericize it to process different file names in
different directories?

Here is my current run syntax:

java com.icl.saxon.StyleSheet -o
C:\bin\merged_lrv_gps_and_trans_tab_delim.xml C:\bin\lrv_trans.xml
C:\bin\merge_lrv_gps_and_trans_to_tab_delim.xsl

And here is the xsl:

merge_lrv_gps_and_trans_to_tab_delim.xsl
----------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="delim" select="'&#x9;'"/> <!-- tab -->
<xsl:variable name="nl" select="'&#xA;'"/> <!-- newline -->
<xsl:variable name="head">
<xsl:for-each select="/root/header/*">
<xsl:value-of select="concat(., $delim)"/>
</xsl:for-each>
</xsl:variable>

<xsl:template match="/root/record">
<xsl:variable name="gps"
select="document('lrv_gps.xml')/root/record[date_time =
current()/date_time]"/>
<xsl:value-of select="$head"/>
<xsl:value-of select="concat($gps/longitude, $delim,
$gps/latitude, $delim)"/>
<xsl:for-each select="*">
<xsl:value-of select="concat(., $delim)"/>
</xsl:for-each>
</xsl:template>

<!--this empty template is to stop the header values from printing at
top of page-->
<xsl:template match="header">
</xsl:template>

</xsl:stylesheet>
TIA
Jul 20 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a

"Luke Airig" <lu********@hotmail.com> wrote in message
news:a0**************************@posting.google.c om...
I have an xsl stylesheet that merges data from two files based upon a
common date/time field. Right now, one of the file names is
hard-coded in the xsl file. Is there any way to make this parameter
driven so I can genericize it to process different file names in
different directories?


Yes, pass the filename as a parameter to the transformation and in your xslt
code use a global xsl:param with the same name as that of the externally
passed parameter.

Here's an excerpt from the Saxon 6.5.3 documentation (\doc\using-xsl.html):

"A param takes the form name=value, name being the name of the parameter,
and value the value of the parameter. These parameters are accessible within
the stylesheet as normal variables, using the $name syntax, provided they
are declared using a top-level xsl:param element. If there is no such
declaration, the supplied parameter value is silently ignored.
Under Windows it is possible to supply a value containing spaces by
enclosing it in double quotes, for example name="John Smith". This is a
feature of the operating system shell, not something Saxon does, so it may
not work the same way under every operating system."

Dimitre Novatchev.
FXSL developer, XML Insider,

http://fxsl.sourceforge.net/ -- the home of FXSL
Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html


Jul 20 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.