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.
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With