我正在寻找一个将当前工作目录存储到变量中的XSL样式表的具体示例。
我需要这个,因为在我的情况下,我需要使用相对路径导入某些库样式表。知道我的处理器选择的路径作为当前目录就足够了。
修改
请不要特定供应商。
答案 0 :(得分:6)
在XSLT 2.0中,可以使用标准的XPath 2.0函数resolve-uri()。
请注意,包含/导入的样式表模块的相对URI是相对于包含/导入样式表模块的基本URI - 而不是来自“工作目录”! 强>
以下是W3 F& O规范中对该功能的描述的一部分:
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:任何URI
总结:此功能的目的 是启用相对URI 解决了绝对URI。
此功能的第一种形式 根据价值解决$ relative 来自的基地 - 乌里属性 静态背景。如果基地 - 乌里 属性未初始化 静态上下文引发错误 [ERR:FONS0005]。
以下是一个非常简单的示例:
<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>
对任何xml文档(未使用)应用此转换时,结果为:
file:///c:/tests/resolve-uri-example2.xsl
这是正确的结果,因为我们的主样式表模块保存为:
c:/tests/resolve-uri-example2.xsl
答案 1 :(得分:2)
在XSL世界中,不能保证存在绝对的当前工作目录,甚至不能保证该概念具有意义。对这个问题的任何答案都必须是特定于供应商的。