2

我正在使用 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() 来添加正确的路径,但我希望它易于重用。

4

2 回答 2

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。

于 2009-08-04T13:49:12.707 回答
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
于 2019-04-24T14:25:02.193 回答