我只想在森林里找到所有的文件名。
我知道森林名称(ABC),我需要找到森林中的所有文件(ABC)。我的输出应该是这样的。
森林ABC
A.xml
B.xml
C.xml等等..。
发布于 2018-04-25 02:16:26
为了列出来自特定森林的所有URI,可以使用cts:uris()并在第5个参数中指定目录id:
cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))您的评论表明,您试图列出来自特定林中的所有URI的原因是,您可以删除重复的URI。
下面的代码可以用于从指定的林中获取所有URI,如果它们是重复的,则从该林中删除它们。
如果试图读取文档属性并引发XDMP异常,则捕获该异常,然后从问题林中删除另一个事务中的文档。
(: update this with the name of problem forest :)
declare variable $PROBLEM-FOREST := xdmp:forest("ABC");
declare variable $URIS := cts:uris((), (), cts:true-query(), (), $PROBLEM-FOREST);
for $uri in $URIS
return
try {
let $properties := xdmp:document-get-properties($uri, xs:QName("foo"))
return ()
} catch($e) {
if ($e/error:code = "XDMP-DBDUPURI") then
xdmp:invoke-function(
function(){ xdmp:document-delete($uri) },
<options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
<database>{$PROBLEM-FOREST}</database>
</options>
)
else ()
}根据此林中有多少文档,您可能会遇到超时问题。您可能会考虑将其作为一个PROCESS-MODULE.运行,其中在 URIs模块中选择了富余URIS,然后在中单独处理每个检查/删除。
发布于 2018-04-24 15:30:41
搜索和词汇表查找可能受到林的限制,因此您应该能够使用类似于以下内容的调用从URI词典中获取文档名称:
cts.values(cts.uriReference(), null, null, null, null, xdmp.forest('ABC'))也就是说,在森林中查找文档名称的动机并不多见。你想做什么?
https://stackoverflow.com/questions/50004963
复制相似问题