Re: [xsl] composing file reference for document() based on xml input

Subject: Re: [xsl] composing file reference for document() based on xml input
From: "Thomas B. Passin" <tpassin@xxxxxxxxxxxx>
Date: Thu, 10 May 2001 17:18:32 -0400
[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


Current Thread