我想替换没有任何元数据(例如权限,属性或集合)的数据库中的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!