XSL,获取当前工作目录

时间:2010-10-11 22:29:08

标签: xml xslt directory

我正在寻找一个将当前工作目录存储到变量中的XSL样式表的具体示例。

我需要这个,因为在我的情况下,我需要使用相对路径导入某些库样式表。知道我的处理器选择的路径作为当前目录就足够了。

修改

请不要特定供应商。

2 个答案:

答案 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世界中,不能保证存在绝对的当前工作目录,甚至不能保证该概念具有意义。对这个问题的任何答案都必须是特定于供应商的。