XSL,获取当前工作目录

5
我正在寻找一个具体的XSL样式表例子,可以将当前工作目录存储到变量中。
我需要这个是因为在我的情况下,我需要使用相对路径导入某些库样式表。知道处理器选择的当前目录路径就足够了。
编辑
请不要提供任何特定于供应商的内容。
2个回答

8
在XSLT 2.0中,可以使用标准XPath 2.0函数resolve-uri()。请注意,包含/导入的样式表模块的相对URI是相对于包含/导入样式表模块的基本URI而不是“工作目录”!以下是来自W3 F&O规范的该函数的部分描述:8.1 fn:resolve-uri以xs:string?形式解析$relative作为xs:anyURI?fn:resolve-uri($relative as xs:string?, $base as xs:string) asxs:anyURI?总结:此函数的目的是使相对URI针对绝对URI进行解析。该函数的第一种形式将$relative相对于静态上下文中的base-uri属性的值进行解析。如果未在静态上下文中初始化base-uri属性,则会引发错误[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

谢谢Dimitre,你能否提供一个具体的例子来确定当前路径。我无法从文档中看出如何做到这一点。 - Mike
谢谢Dimitre,一如既往地感谢您对我的XSLT问题的彻底帮助。 - Mike
1
@Mike:不客气。希望我的回答对你有所帮助,以至于你会点赞并接受它。 :) - Dimitre Novatchev

3
在XSL世界中,不能保证存在绝对的当前工作目录,甚至这个概念都可能没有意义。因此,对于这个问题的任何答案都必须是特定于厂商的。

@Jim-Garrison:实际上,你的回答通常是不正确的。 - Dimitre Novatchev
@Dimitre:你能详细说明一下吗? - Jim Garrison
@Jim-Garrison:OP 实际上询问的是 xslt 样式表模块的 base-uri,而不是工作目录。 - Dimitre Novatchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接