1

我有一个 xml 文件,其中包含另一个 xml 文件的名称:

在我的样式表中,我检测到@href 并通过 document() 函数打开文档

文档(@href)

应该调用我的 URIResolver.resolve(fname,base),其基数为“计算第一个参数的字符串的节点的基本 URI”

文档(@href,.)

应该调用我的 URIResolver.resolve(fname,base) 与“当前节点的基本 URI”

然而在实践中使用 Xalan/J

文档(@href)

为空白

文档(@href,.)

正在提供我的应用程序的当前目录

如何设置基础以便我的 URIResolver 可以找到该文件?

4

1 回答 1

1

请注意,这

document(@href)

等于这个

document(string(@href),@href)

所以也许也

document(string(@href),.)

来自http://www.w3.org/TR/xslt#document

当文档函数只有一个参数并且参数是一个节点集时,结果是参数节点集中每个节点的联合调用文档函数的结果,第一个参数是字符串-节点的值,第二个参数是一个节点集,该节点是其唯一成员。

接着

第二个参数节点集中的节点的基本 URI(参见 [3.2 基本 URI])在文档顺序中排在第一位,用作将相对 URI 解析为绝对 URI 的基本 URI

但是这个:

document(string(@href))

将使用样式表 URI 作为解析器。因为:

当文档函数的第一个参数不是节点集时,第一个参数被转换为字符串,就像调用字符串函数一样。此字符串被视为 URI 引用。

接着

如果省略第二个参数,则默认为样式表中包含表达式的节点,该表达式包含对文档函数的调用。

关于问题

如何设置基础以便我的 URIResolver 可以找到该文件?

答:使用第二种形式和@xml:base

于 2010-11-16T22:20:46.147 回答