我有一個XML文檔如下如何使用XQuery
<users>
<user test="oldvalue">
<userid>sony</userid>
<name>vijay</name>
</user>
</users>
我試圖寫一個XQuery來 1)找出與給定用戶ID的用戶替換屬性的值 - 索尼 2)將給定用戶的「test」屬性的值更改爲「newvalue」。
我嘗試了以下內容:(其中DOC_NAME = XML文檔的名稱,用戶ID =索尼)
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]/@ test let $ new:= $ users_doc/user [userid = $ userid]/@ test {'newvalue'} return replace node $ old $ new導致錯誤:[XPST0003]期待'where','order'或'return'表達式。我也試過用$ new替換屬性$ old。請注意,xml文檔可能有多個用戶,每個用戶都有一個測試屬性。 – sony 2010-11-12 20:58:41
@sony:檢查我的編輯。 – 2010-11-12 21:49:49
let $ new:= attribute test {'newvalue'} - 我不確定這會引用什麼。這裏屬性測試是什麼?考慮到會有多個用戶,在一個文檔中會有多個測試屬性。你的意思是$ new:= $ users_doc/user [userid = $ userid]/@ test {'newvalue'}。我不確定你編輯了什麼。 – sony 2010-11-12 22:39:52