作者:c颖c颖漂亮 | 来源:互联网 | 2022-12-05 15:58
我试图在单个文档中替换大约500个节点,我在我的数据库中有5000+文档.
我正在使用的代码与之前询问的这个问题有关 -
链接
有什么建议让我的代码有效吗?
1> Mads Hansen..:
通常应避免使用内存更新库,尤其是在对同一文档进行大量方法调用时.由于每个方法遍历整个节点树并生成一个全新的文档,因此如果您针对大型文档运行和/或对这些文档进行一堆mem:*方法调用,则速度可能会很慢而且成本很高.
更好的替代品是Ryan Dew的XQuery XML Memory Operations库,或者使用XSLT.
下面是一个如何使用XSLT执行这种"合并"的示例,它应该比in-mem-update方法执行得更好:
declare variable $STAGING := document{
1
India
USA
Russia
Srilanka
Europe
Antartica
Spain
};
declare variable $FINAL := document{
1
Europe
Antartica
};
declare variable $XSLT :=
;
declare variable $PARAMS := map:new((
map:entry("staging-doc", $STAGING),
map:entry("element-names", tokenize(("value1,value2,value3,value4,value7"), ",") )
));
xdmp:xslt-eval($XSLT, $FINAL, $PARAMS)