4

次のようなxmlドキュメントがあります

<users>
  <user test="oldvalue">
   <userid>sony</userid>
   <name>vijay</name>
  </user>
</users>

1) 指定されたユーザー ID を持つユーザーを検索する xquery を作成しようとしています - 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

次のエラーが表示されます: [XUTY0008] 単一の要素、テキスト、属性、コメント、または pi が置換ターゲットとして期待されています。

これを修正するにはどうすればよいですか?

4

2 に答える 2

5

あなたが書いた:

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:この場合は使用する方が良いと思います。

于 2010-11-12T20:33:00.740 に答える
2
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"]

ところで:replace標準のXQueryには演算子はありません。

于 2010-11-13T03:11:13.693 に答える