document('') gives you an XML representation of the current stylesheet
module, in its state before any processing of xsl:include. So this won't
work.
But you could put a global variable in the included stylesheet module of
the form
<xsl:variable name="x" select="document('')/*/gem:data/..." />
and then in the main module you could refer to this variable.
Michael Kay
-----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
Lars Huttar
Sent: 02 February 2004 14:20
To: XSL-List (E-mail)
Subject: [xsl] can one include/import XML data into stylesheets?
Hello all,
I have a stylesheet that uses
<xsl:value-of
select="document('../resources/gem-data.xml')/*/gem:data/..."
/> to access some data it needs. My question is, instead of
using document('path...'), can I use
<xsl:include href="../resources/gem-data.xsl" />
(where gem-data.xsl is a stylesheet that has the data of
gem-data.xml at the top level) and then later
<xsl:value-of select="document('')/*/gem:data/..." />
?
In other words, will the <xsl:include> pull the data from
the included file into the document tree of the includer
stylesheet so that document('') can access it?
The spec says,
"The resource located by the href attribute value is parsed
as an XML document, and the children of the xsl:stylesheet
element in this document replace the xsl:include element in
the including document."
Trying it in Cocoon with Xalan, it doesn't seem to work, i.e.
the value-of instruction is getting nothing. The same thing
happens in Saxon. Is there a way to do this that I'm not
getting, or is it just not possible?
Here is my test stylesheet (includer):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gem="http://www.sil.org/namespace/gem">
<xsl:include href="../resources/gem-data.xsl" />
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<xsl:value-of select="count(document('')/*/gem:data)" />
</xsl:template>
</xsl:stylesheet>
Included stylesheet (../resources/gem-data.xsl):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<gem:data xmlns:gem="http://www.sil.org/namespace/gem">
...
</gem:data>
</xsl:stylesheet>
The reason I wanted to try xsl:include/document('') instead
of document('path') is that Cocoon frowns on the use of
document('path'); it messes up caching. Not that it matters
much; the data is basically static anyway.
Thanks,
Lars
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list