This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: composing file reference for document() based on xml input
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: Re: [xsl] composing file reference for document() based on xml input
- From: "Thomas B. Passin" <tpassin at mitretek dot org>
- Date: Thu, 10 May 2001 17:18:32 -0400
- References: <NDBBJLODDMKIOFAANFMHMECNCNAA.joelt@tlchoices.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
[Joel P Thornton]
> I'm trying to piece together a file reference for use in a document() call
> in my XSL. I want to specify part of the referenced document's path via a
> text node from my xml input tree.
>
> Here is what I've got so far, but it does not work:
>
> <xsl:copy-of select="document({/root/state/site/physical-site/root} +
> '/xml/navigation.xml')"/>
>
> So, if the text node at /root/state/site/physical-site-root is
> 'c:/inetpub/wwwroot', then I want the argument to my document() function
to
> be 'c:/inetpub/wwwroot/xml/navigation.xml'. I'm just not quite sure what
> the right syntax is for doing this.
>
It doesn't work because the attribute template mechanism (with the curly
braces {}) is for putting attribute values into the output tree, not into
xslt instructions.
I just tested this and it works (msxml3 and saxon both):
<xsl:variable name='half-path'
select='/root/state/site/physical-site/root'/>
<xsl:variable name='full-path'
select="concat($half-path,'/xml/navigation.xml')"/>
<xsl:copy-of select='document($full-path)'/>
Here's the xml file I used with this stylesheet:
<root>
<state>
<site>
<physical-site>
<root>file:///d:\test</root>
</physical-site>
</site>
</state>
</root>
You could skip the variables and do everything at once, but this way it's a
lot easier to understand what's being done.
Cheers,
Tom P
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list