我想替换没有任何元数据(例如权限,属性或集合)的数据库中的xml文档。不能选择托管文档(dls)。

使用xdmp:document-insert()不会保留权限,集合等。

使用xdmp:node-replace()可以很好地处理文档的某些部分,但需要事先了解根节点。

有没有建议的方法来更新MarkLogic中的整个文档?

最佳答案

您实际上并不需要知道根元素本身。如果您知道文档URI,则可以执行以下操作:

xdmp:node-replace(fn:doc($uri)/*, $new-xml)

如果您有文档的任何节点,也可以执行以下操作:
xdmp:node-replace($node/fn:root(), $new-xml)

但是,只使用xdmp:document-insert()也没有那么困难:
xdmp:document-insert($uri, $new-xml, xdmp:document-get-permissions($uri), xdmp:document-get-collections($uri), xdmp:document-get-quality($uri))

注意:文档属性保留在文档插入处。另请参阅:http://docs.marklogic.com/xdmp:document-insert

此外,这些方法之间的性能差异不大。在这方面最大的区别是xdmp:node-replace()需要原始文档中的一个节点,这意味着必须首先从数据库中检索它。如果替换不依赖于原始文档,那么xdmp:document-insert()将是最快的。

HTH!

08-25 17:04