Xpath Marklogic-如何在单个xquery中执行插入和节点替换
我提供了用于插入和节点替换查询的示例Xquery 我的问题是,如果要执行查询,它只会先插入XML 即使我将执行第二次,节点也将被替换 但是我想要一次执行,它也会被插入和更新Xpath Marklogic-如何在单个xquery中执行插入和节点替换,xpath,xquery,marklogic,Xpath,Xquery,Marklogic,我提供了用于插入和节点替换查询的示例Xquery 我的问题是,如果要执行查询,它只会先插入XML 即使我将执行第二次,节点也将被替换 但是我想要一次执行,它也会被插入和更新 sample query : xquery version "1.0-ml"; declare namespace html = "http://www.w3.org/1999/xhtml"; let $a := xdmp:document-insert("/fo.xml", <a>1</a>)
sample query :
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
let $a := xdmp:document-insert("/fo.xml", <a>1</a>)
let $b := xdmp:node-replace(fn:doc("/fo.xml")/a, <b>1</b>)
return ($a,$b)
示例查询:
xquery版本“1.0-ml”;
声明命名空间html=”http://www.w3.org/1999/xhtml";
让$a:=xdmp:documentinsert(“/fo.xml”,1)
让$b:=xdmp:node替换(fn:doc(“/fo.xml”)/a,1)
回报(a$b)
您不能在一条语句中执行此操作。您需要:
xquery version "1.0-ml";
xdmp:document-insert("/fo.xml", <a>1</a>)
;
xquery version "1.0-ml";
xdmp:node-replace(fn:doc("/fo.xml")/a, <b>1</b>)
xquery版本“1.0-ml”;
xdmp:document insert(“/fo.xml”)。您可以使用下载并安装该库。使用该库,您可以编写如下内容:
import module namespace mem = "http://maxdewpoint.blogspot.com/memory-operations" at "/ext/mlpm_modules/XQuery-XML-Memory-Operations/memory-operations.xqy";
let $a := <a>1</a>
let $b := <b>1</b>
let $updated-a := mem:copy($a) ! (
mem:replace(., $a, $b),
mem:execute(.)
)
return xdmp:document-insert("/foo.xml", $updated-a)
导入模块名称空间mem=”http://maxdewpoint.blogspot.com/memory-operations“at”/ext/mlpm_modules/XQuery XML Memory Operations/Memory Operations.xqy”;
设$a:=1
设$b:=1
让$updated-a:=mem:copy($a)(
成员:替换(,$a,$b),
mem:execute(.)
)
返回xdmp:documentinsert(“/foo.xml”,$updated-a)
HTH!根据grtjn的回答,您可以执行以下操作:
xdmp:document-insert("/fo.xml", <a>1</a>);
xdmp:node-replace(fn:doc("/fo.xml")/a, <b>1</b>);
xdmp:documentinsert(“/fo.xml”,.谢谢更新…如何更新?我只提供了示例查询,在过去的两天里我一直使用此查询,请您提供示例或更改上面的查询。是的,但我使用for循环,因此我无法存储内存如果我存储内存,重复的内容将插入相同的XML中。请更新问题以反映这一点,因此,我们可以适当地回答..我已经添加了完整的Xquery,你能帮忙吗?是的,我已经向my query中吐了口水。现在它可以正常工作了,比如(关于1)。但是我有框架uri,并且在查询中使用了很多逻辑。那么还有其他替代方法吗?