Xpath Marklogic-如何在单个xquery中执行插入和节点替换

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>)

我提供了用于插入和节点替换查询的示例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>)

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)

您不能在一条语句中执行此操作。您需要:

  • 使用多语句调用(以分号分隔的主语句)
  • 在内存中执行更新,并将更新的内容传递给insert
  • 关于1:

    《应用程序开发人员指南》中有一节介绍了如何编写查询,但简而言之,它可以归结为如下内容:

    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,并且在查询中使用了很多逻辑。那么还有其他替代方法吗?