我正在使用 mem:node-replace 来替换内容。但这花费了太多时间。我遇到了超时错误。 有没有替代方案呢?
找到Sample Xquery:
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
import module namespace mem = "http://xqdev.com/in-mem-update"
at '/MarkLogic/appservices/utils/in-mem-update.xqy';
let $uri := cts:uri-match((concat('*',$id ,'*')),(),cts:collection-query($collection))
let $data := doc($uri)
let $final := mem:node-replace($data//title[@id='2'],doc($uri1)//title[@id='2'])
return (
xdmp:document-insert('/test/sample.xml',$final)
)
答案 0 :(得分:4)
mem:node-replace()
不是修改内容的最有效方式。
如果您的文档已经在数据库中,并且您只想替换节点,则无需使用in-mem-update库。
您应该使用xdmp:node-replace()
。
对于更复杂的转换,您还可以考虑以下内存转换选项:
xdmp:xslt-eval()
与本地XSLT变量一起使用,或将xdmp:xslt-invoke()
与已加载到Modules数据库中的XSLT一起使用。这是一种稍微不同的编程风格,但通常可以使用修改后的identity transform作为"推送风格"更加简单地开发和开发。样式表,其中包含您需要进行更改的特定模板。如果您需要修改大量文档,那么如果您尝试在单个模块执行中完成所有操作,则仍可能会遇到超时问题。
您应该使用批处理工具管理批量文档更改,例如: