我有几个文件,xdmp:node-replace()
某些元素不起作用。还有一些其他的文档几乎与有问题的文档类似,但xdmp:node-replace
对它们完全正常。尝试了所有可能出错但却徒劳的可能性。阅读xdmp:node-replace
函数在“内存元素 中无效的地方。”
因此,为了验证问题是否与“ in memory elements ”有关,我想知道究竟是什么。
对它有任何启发都会有很大的帮助
答案 0 :(得分:6)
查询中构造的任何内容都是内存中的元素。例如,这个XQuery产生一个内存元素:
<test/>
某些函数调用也会返回内存中的元素:xdmp:unquote
是一个明显的例子。任何不是来自当前数据库的节点都将被视为内存节点。
此查询产生一个数据库元素(如果存在),可以使用xdmp:node-replace
进行修改:
doc('fubar')/test
这是典型的内存更新错误:
xdmp:node-replace(<x/>, <y/>)
使用MarkLogic 6.0-1.1时,错误代码为XDMP-UPCONSTNODES
。
答案 1 :(得分:6)
如果你想通过使用类似的函数调用来更新内存节点,就好像它们在数据库中一样,那么有一个实用程序库可以做到这一点:
https://github.com/marklogic/commons/tree/master/memupdate
主库还附带了App Services下的MarkLogic Server:
appservices / utils的/在-MEM-update.xqy
答案 2 :(得分:2)
如果您使用in memory elements
导入以下模块
import module namespace mem = "http://xqdev.com/in-mem-update" at "/MarkLogic/appservices/utils/in-mem-update.xqy";
您可以使用xdmp:node-replace
mem:node-replace(<x/>, <y/>)