如何使用可解析的基本引用调用xpath document()

时间:2010-11-16 21:53:49

标签: java xml xslt xalan

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

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

文件(@href)

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

文件(@href,。)

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

然而在实践中使用Xalan / J

文件(@href)

是空白

文件(@href,。)

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

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

1 个答案:

答案 0 :(得分:1)

请注意这个

document(@href)

它等于这个

document(string(@href),@href)

也许也许

document(string(@href),.)

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

  

文档功能完全正确时   一个参数和参数是一个   节点集,然后结果是   union,用于参数中的每个节点   node-set,调用的结果   文档功能与第一个   参数是字符串的值   节点,第二个参数是a   以节点为唯一的节点集   构件。

然后

  

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

但是这个:

document(string(@href))

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

  

第一个参数时   文档功能不是节点集,   第一个参数转换为a   字符串就像通过调用字符串一样   功能。此字符串被视为a   URI引用。

然后

  

如果省略第二个参数,   那么它默认为中的节点   包含的样式表   包含调用的表达式   文件功能。

关于问题

  

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

答案:使用第二种表单和@xml:base