2010-11-14 81 views
1

我使用下面的XML文档如何在XPath中使用

<users> 
    <user> 
    <userid>sony</userid> 
    <password>sonypass</password> 
    </user> 
</users> 

我想写一个共同的XQuery通过将变量更新用户信息的XQuery的元素中的变量 - 一)DOC_NAME( b)用户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 /用户[用户ID = $用户ID]/{$ update_node} )

有没有办法在xpath中使用元素变量?

感谢, 索尼

回答

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 
+0

@Alejandro :谢谢等再次:) – sony 2010-11-14 22:13:44

+0

@sony:你很好,随时问。 – 2010-11-14 22:26:24

+0

对于正确答案+1。 – 2010-11-15 01:16:12

0

我认为你需要更改线路

let $old_node := $users_doc/user[userid=$userid]/{$update_node} 

let $old_node := $users_doc[userid=$userid]/{$update_node}