我正在使用Oxygen XML来处理包含对其他XML文件的引用的XML文件。这些其他XML文件存储在包含主XML文件的目录的子目录中。
Downloads/
directory1/
main.xml
subdirectory1/
other1.xml
other2.xml
其他XML文件的位置存储为主文件中的相对链接。我的查询看起来像这样:
for $df in /clldata/DiscussionForums/DiscussionForum
let $href := replace(data($df/@href),"\\","/")
for $p in doc($href)
return $p
我遇到的问题是Oxygen使用xquery文件的路径作为相对路径的基础,显然导致文件未找到错误。如何在查询中获取XML文档的路径?
现在我只是使用concat()来添加正确的路径,但我希望它可以轻松重用。
答案 0 :(得分:2)
您需要解析相对于主XML文档的URI的URI。在您的情况下,您可能想要执行以下操作:
let $href = resolve-uri($d/@href, base-uri($d))
这里,base-uri($ d)函数获取包含相关DiscussionForum节点的源文档的绝对URI,而resolve-uri正在解析相对于此的新URI。
这适用于我在jedit XQuery插件上使用SAXON。 YMMV,我从未使用过Oxygen XML。
答案 1 :(得分:0)
我认为以下XPath表达式应选择所有链接的文档:
/clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
因此,您应该能够像这样找到所有找到的文档上的任何xml元素:
/clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
/path/to/the/element/you/want/to/find/in/all/documents/@name
如果您更喜欢FLOWR样式表达式,则应执行以下操作:
for $doc in /clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
where $doc/some/criteria='select'
return $doc/path/to/the/element/you/want/to/find/in/all/documents/@name