1

是否有类似于 xdmp:directory 的东西用于遍历具有不以“/”开头的 uri 的文档,即“ http://something.other.com/documents/ ”?或者是否有某种方法可以获取文档 uri 与正则表达式匹配的所有文档?

例如,我想提取以下文件:

4

1 回答 1

5

cts:uri-match应该正是您正在寻找的。您可以在其中放置通配符表达式,例如cts:uri-match('/myDirectory/sub-dir/*.xml'). 这将返回一个 URI 列表作为字符串,然后您可以通过执行以下操作来大量获取这些文档(注意:fn:doc()可以取零到多个 uri):

let $uris as xs:string* := cts:uri-match("/you/directory/structure/*.xml")
let $docs as document-node()* := fn:docs($uris)
return $docs

根据下面 Tyler 的评论,cts:query如果可能,您应该在此搜索中传入限定符,例如:

let $uris as xs:string* := cts:uri-match("/your/directory/structure/*.xml", (), cts:directory-query("/your/directory/structure/", "infinity"))
let $docs as document-node()* := fn:docs($uris)
return $docs

在上面的例子中,将cts:directory-query范围缩小了一点,注意“infinity”会将所有子目录都带到无限的级别。

或者,如果它们都在您想要的目录(或多个目录)下,并且不需要通配符来进一步限定文件名等,您可以这样做更好:

cts:search(fn:collection(), cts:directory-query("/some-dir/", "infinity"))

但是,如果您想使用正则表达式式搜索,第一个选择绝对是您的朋友。

http://docs.marklogic.com/7.0/cts:uri-match

于 2016-02-15T23:52:41.807 回答