包装现有节点的XQuery更新

包装现有节点的XQuery更新,xquery,basex,Xquery,Basex,我试图使用XQuery update将一个节点与另一个新节点包装在一起,但我遇到了几个不同的错误,让我给您举一个简短的示例: 初始XML是 <a id="test"> <title>title</title> </a> 注:查询结果: db:open('testdb')/a[@id eq 'test']/title 是 执行此类更新查询的正确方法是什么?您需要修改绑定到$x的节点,并返回$x: copy $a := db:open('tes

我试图使用XQuery update将一个节点与另一个新节点包装在一起,但我遇到了几个不同的错误,让我给您举一个简短的示例:

初始XML是

<a id="test">
  <title>title</title>
</a>
注:查询结果:

db:open('testdb')/a[@id eq 'test']/title


执行此类更新查询的正确方法是什么?

您需要修改绑定到$x的节点,并返回$x:

copy $a := db:open('testdb')/a[@id eq 'test']
modify replace node $a/title with <b>{ $a/title }</b> 
return $a
如果要更新数据库节点本身,则无需使用
copy
update

let $title := db:open('testdb')/a[@id eq 'test']/title 
return replace node $title with <b>{ $title }</b> 
let$title:=db:open('testdb')/a[@id eq'test']/title
返回用{$title}替换节点$title

第一个查询引发错误“[XUDY0009]目标没有父:元素”。第二个查询在“replace”标记上引发语法错误表达式:(但第三个查询工作正常。我已更新了前两个查询。要了解更新和非更新表达式之间的区别,请查看语义:。
db:open('testdb')/a[@id eq 'test']/title
<title>title</title>
copy $x := db:open('testdb')/a[@id eq 'test']/title 
modify replace node db:open('testdb')/a[@id eq 'test']/title
with <b>{$x}</b> 
return <ok/>
[XUDY0014] Node was not created by copy clause: element title {...}.
copy $a := db:open('testdb')/a[@id eq 'test']
modify replace node $a/title with <b>{ $a/title }</b> 
return $a
db:open('testdb')/a[@id eq 'test'] update {
  replace node title with <b>{ title }</b> 
}
let $title := db:open('testdb')/a[@id eq 'test']/title 
return replace node $title with <b>{ $title }</b>