我有几个文件在xdmp:node-replace()
某些元素上不起作用。还有一些其他文档集几乎与有问题的文档相似,但xdmp:node-replace
在它们上运行得非常好。尝试了所有可能出错但徒劳的可能性。阅读一些该功能在“内存元素xdmp:node-replace
”中不起作用的地方。
因此,为了验证问题是否与“内存元素”有关,我想知道它到底是什么。
任何点亮它都会有很大帮助
我有几个文件在xdmp:node-replace()
某些元素上不起作用。还有一些其他文档集几乎与有问题的文档相似,但xdmp:node-replace
在它们上运行得非常好。尝试了所有可能出错但徒劳的可能性。阅读一些该功能在“内存元素xdmp:node-replace
”中不起作用的地方。
因此,为了验证问题是否与“内存元素”有关,我想知道它到底是什么。
任何点亮它都会有很大帮助
在查询中构造的任何内容都是内存中的元素。例如,这个 XQuery 产生一个内存元素:
<test/>
一些函数调用也返回内存中的元素:xdmp:unquote
这是一个明显的例子。任何不是来自当前数据库的节点都将被视为内存节点。
此查询产生一个数据库元素(如果存在),可以使用以下命令进行修改xdmp:node-replace
:
doc('fubar')/test
这是一个典型的内存更新错误:
xdmp:node-replace(<x/>, <y/>)
对于 MarkLogic 6.0-1.1,错误代码为XDMP-UPCONSTNODES
.
如果您想通过使用类似的函数调用来更新内存中的节点,就像它们在数据库中一样,那么有一个实用程序库可以做到这一点:
https://github.com/marklogic/commons/tree/master/memupdate
主库还在 App Services 下随 MarkLogic Server 一起提供:
appservices/utils/in-mem-update.xqy
如果您使用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/>)