我有一个xml文件,其中包含另一个xml文件的名称:
在我的样式表中,我检测到@href并通过document()函数打开文档
文件(@href)
应该调用我的URIResolver.resolve(fname,base),其基础是“计算第一个参数的字符串的节点的基URI”
文件(@href,。)
应该以“当前节点的基本URI”为基础调用我的URIResolver.resolve(fname,base)
然而在实践中使用Xalan / J
文件(@href)
是空白
和
文件(@href,。)
正在提供我的应用程序的当前目录
如何设置base以便我的URIResolver可以找到该文件?
答案 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