问题
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.
回答1:
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
回答2:
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.
来源:https://stackoverflow.com/questions/3910389/xsl-get-current-working-directory