6

我有几个文件在xdmp:node-replace()某些​​元素上不起作用。还有一些其他文档集几乎与有问题的文档相似,但xdmp:node-replace在它们上运行得非常好。尝试了所有可能出错但徒劳的可能性。阅读一些该功能在“内存元素xdmp:node-replace”中不起作用的地方。

因此,为了验证问题是否与“内存元素”有关,我想知道它到底是什么。

任何点亮它都会有很大帮助

4

3 回答 3

6

在查询中构造的任何内容都是内存中的元素。例如,这个 XQuery 产生一个内存元素:

<test/>

一些函数调用也返回内存中的元素:xdmp:unquote这是一个明显的例子。任何不是来自当前数据库的节点都将被视为内存节点。

此查询产生一个数据库元素(如果存在),可以使用以下命令进行修改xdmp:node-replace

doc('fubar')/test

这是一个典型的内存更新错误:

xdmp:node-replace(<x/>, <y/>)

对于 MarkLogic 6.0-1.1,错误代码为XDMP-UPCONSTNODES.

于 2012-11-27T17:15:02.653 回答
6

如果您想通过使用类似的函数调用来更新内存中的节点,就像它们在数据库中一样,那么有一个实用程序库可以做到这一点:

https://github.com/marklogic/commons/tree/master/memupdate

主库还在 App Services 下随 MarkLogic Server 一起提供:

appservices/utils/in-mem-update.xqy

于 2012-11-27T21:04:31.370 回答
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/>)

于 2015-03-04T12:11:21.343 回答