Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XSL, get current working directory

I'm looking for a concrete example of an XSL stylesheet storing the current working directory into a variable.

I need this because in my situation, I need to import certain library stylesheets using a relative path. Knowing the path my processor is choosing as the current directory would be sufficient.

EDIT

Nothing vendor specific please.

like image 595
Mike Avatar asked Oct 11 '10 22:10

Mike


2 Answers

In XSLT 2.0 one can use the standard XPath 2.0 function resolve-uri().

Do note, that the relative URIs of the included/imported stylesheet modules are relative to the base URI of the including/importing stylesheet module -- not from the "working directory"!

Here is part of the description of this function from the W3 F&O specification:

8.1 fn:resolve-uri

fn:resolve-uri($relative as xs:string?) as xs:anyURI?

fn:resolve-uri($relative as xs:string?, $base as xs:string) as xs:anyURI?

Summary: The purpose of this function is to enable a relative URI to be resolved against an absolute URI.

The first form of this function resolves $relative against the value of the base-uri property from the static context. If the base-uri property is not initialized in the static context an error is raised [err:FONS0005].

Here is a very simple example:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:sequence select=
   "resolve-uri('resolve-uri-example2.xsl')"/>
 </xsl:template>
</xsl:stylesheet>

when this transformation is applied against any xml document (not used), the result is:

file:///c:/tests/resolve-uri-example2.xsl

This is the correct result, because our main stylesheet module is saved as:

c:/tests/resolve-uri-example2.xsl
like image 152
Dimitre Novatchev Avatar answered Nov 08 '22 01:11

Dimitre Novatchev


In the XSL world there's no guarantee that an absolute current working directory exists, or even that the concept has meaning. Any answer to this question would necessarily be vendor-specific.

like image 3
Jim Garrison Avatar answered Nov 08 '22 02:11

Jim Garrison