查找具有多个根元素的文档-MarkLogic

查找具有多个根元素的文档-MarkLogic,marklogic,Marklogic,不幸的是,由于我们的代码中有一个bug,一些文档是使用多个根元素创建的,这些根元素具有重复的内容 例如 fn:doc("doc1.xml") 会回来吗 <doc1> <a>AA</a> </b> </doc1> <doc1> <a>AA</a> </b> </doc1> AA AA 是否有一种有效的方法来识别具有多个根元素的所有文档 提前

不幸的是,由于我们的代码中有一个bug,一些文档是使用多个根元素创建的,这些根元素具有重复的内容

例如

fn:doc("doc1.xml") 
会回来吗

<doc1>
    <a>AA</a> 
    </b>
</doc1>
<doc1>
   <a>AA</a>
   </b>
</doc1>

AA
AA
是否有一种有效的方法来识别具有多个根元素的所有文档


提前谢谢。

可能吗?大概Marklogic会对此进行大量检查,这样就不会发生这种情况。两个文档是否在同一个林中

MarkLogic通常不允许创建包含多个根元素的文档,尽管我不确定它是否保证不能。然而,在一些已知的情况下,您最终可能会看到多个文档具有相同的数据库URI

一种方法是为一个数据库创建两个林,断开第二个林,插入一个文档,用第二个林替换第一个林,然后再次插入同一个文档。之后,连接两个林,您将在同一个数据库uri中拥有相同的文档两次,但位于不同的林中。只有一片森林就不可能做到这一点

如何摆脱这些?循环doc()[count(doc1)>1]/base-uri(),然后重新插入这些文档。如果从数据库中提取值,则必须决定要保留哪个文档节点,这可能并不容易。您可能还需要检查在这种情况下涉及多少文档。如果重新插入的文档超过(几千)个,则需要对其进行批处理


我无法复制,出现XDMP-MULTIELEMCHILDREN错误。我很想知道你是如何做到这一点的。除此之外,一个钝的doc()[count(doc1)>1]/base-uri()应该向您显示uri。不过可能需要更长的时间来运行..谢谢你的建议。进一步查看后,似乎可能有两个具有相同uri的文档。数据库中是否可能有多个具有相同uri的文档?该文档位于同一个林中。我运行了一个本文中提到的查询,以确定文档uri是否存在于多个林中。但是根据查询结果,两个根节点都从单个林返回。我正在创建帮助台记录单以进一步调查。谢谢