我正在使用以下xml文档
<users>
<user>
<userid>sony</userid>
<password>sonypass</password>
</user>
</users>
我正在尝试编写一个通用的xquery来通过传递变量来更新用户信息 - a)doc_name(xml文档的名称)b)userid(要更新其信息的用户的用户ID)c)update_node(要更新的元素,例如密码)d)new_value(要更新的元素的新值,例如sonynewpass)。我不知道如何在xpath中使用元素变量来执行此操作。我尝试了以下方法:
declare variable $doc_name as xs:string external;
declare variable $userid as xs:string external;
declare variable $update_node as xs:element() external;
declare variable $new_value as xs:string external;
let $users_doc := doc($doc_name)/users
let $old_node := $users_doc/user[userid=$userid]/{$update_node}
return replace value of node $old_node with $new_value
但是,这个查询在第7行抛出[XPST0003]期望位置路径错误(让$ old_node:= $ users_doc / user [userid = $ userid] / {$ update_node})
有没有办法在xpath中使用元素变量?
谢谢, 索尼
答案 0 :(得分:3)
您可以传递节点名称:
declare variable $doc_name as xs:string external;
declare variable $userid as xs:string external;
declare variable $update_node external;
declare variable $new_value as xs:string external;
let $users_doc := doc($doc_name)/users
let $old_node := $users_doc/user[userid=$userid]/*[name()=$update_node]
return replace value of node $old_node with $new_value
答案 1 :(得分:0)
我认为您需要更改行
let $old_node := $users_doc/user[userid=$userid]/{$update_node}
的
let $old_node := $users_doc[userid=$userid]/{$update_node}