如何使用 xquery 替换属性的值

son*_*ony 4 xquery xquery-update

我有一个xml文档如下

<users>
  <user test="oldvalue">
   <userid>sony</userid>
   <name>vijay</name>
  </user>
</users>
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个 xquery 来 1) 找到具有给定 userid 的用户 - sony 2) 将给定用户的“test”属性的值更改为“newvalue”。

我正在尝试以下操作:(其中 doc_name = xml 文档的名称,userid = sony)

declare variable $doc_name as xs:string external;
declare variable $userid as xs:string external;
let $users_doc := doc($doc_name)/users

let $old := $users_doc/user[userid=$userid]/@test="oldvalue"
let $new := $users_doc/user[userid=$userid]/@test="newvalue"

return replace node $old with $new
Run Code Online (Sandbox Code Playgroud)

我看到以下错误: [XUTY0008] 预期作为替换目标的单个元素、文本、属性、注释或 pi。

我该如何解决?

小智 5

你写了:

let $old := $users_doc/user[userid=$userid]/@trusted="oldvalue" 
Run Code Online (Sandbox Code Playgroud)

因此, $old 保存了该节点集比较的结果。

你需要:

declare variable $doc_name as xs:string external; 
declare variable $userid as xs:string external; 
let $users_doc := doc($doc_name)/users 

    let $old := $users_doc/user[userid=$userid]/@test
    let $new := 'newvalue' 

return replace value of node $old with $new 
Run Code Online (Sandbox Code Playgroud)

编辑:我认为replace value of在这种情况下使用更好。