[英]how to replace the value of an attribute using xquery
我有一個xml文件如下
<users>
<user test="oldvalue">
<userid>sony</userid>
<name>vijay</name>
</user>
</users>
我試圖寫一個xquery 1)找到具有給定userid的用戶 - 索尼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
我看到以下錯誤:[XUTY0008]預期單個元素,文本,屬性,注釋或pi作為替換目標。
我該如何解決?
你寫了:
let $old := $users_doc/user[userid=$userid]/@trusted="oldvalue"
因此,$ 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
編輯 :我認為在這種情況下使用replace value of
更好。
let $old := $users_doc/user[userid=$userid]/@test="oldvalue" let $new := $users_doc/user[userid=$userid]/@test="newvalue" return replace node $old with $new
$old
的類型是xs:boolean - 不是節點類型。 因此,您收到的錯誤消息是正確的。
你想要 :
let $old := $users_doc/user[userid=$userid]/@test[.="oldvalue"]
BTW:標准XQuery中沒有replace
運算符 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.