是否存在类似于xdmp:directory的内容,用于遍历具有不以“/”开头的uris的文档,即“http://something.other.com/documents/”?或者是否有某种方法可以获取文档uri与正则表达式匹配的所有文档?
例如,我想提取文件:
答案 0 :(得分: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
将范围缩小了一点,并注意到"无穷大"将所有子目录带到无限级别。
或者,如果它们都在您想要的目录(或多个目录)下,并且不需要通配符来进一步限定文件名等,那么您可以更好地使用:
cts:search(fn:collection(), cts:directory-query("/some-dir/", "infinity"))
但是如果你想使用正则表达式 - esque搜索,第一个选项肯定是你的朋友。