2010-11-06 59 views
1

我使用下面的XML文件(users_doc.xml)XQuery的例外[XPTY0019]

<users> 
    <user trusted="false"> 
    <userid>[email protected]</userid> 
    <password>sony</password> 
    </user> 
    <user trusted="false"> 
    <userid>shivi</userid> 
    <password>shivi</password> 
    </user> 
    <user trusted="false"> 
    <userid>xyz</userid> 
    <password>xyz</password> 
    </user> 
</users> 

我运行下面的XQuery:(这里$ DOC_NAME = users_doc,$用户id = XYZ)

declare variable $doc_name as xs:string external; 
declare variable $userid as xs:string external; 
let $users_doc := doc($doc_name)/users 

return delete node $users_doc/user/userid=$userid/.. 

我试图找到一个给定节点<userid>xyz</userid>和该用户是否存在,我想删除它的父节点

<user trusted="false"> 
    <userid>xyz</userid> 
    <password>xyz</password> 
    </user> 

但是,当我运行此查询时,出现以下异常:

Exception in thread "main" java.io.IOException: Stopped at line 5, column 51: 
[XPTY0019] Context node required for ..; xs:string found. 

如何解决此问题?

谢谢, 索尼

回答

2

http://www.w3.org/TR/xquery/#ERRXPTY0019

ERR:XPTY0019

它是一种类型的错误,如果一步骤的结果在(比 最后步骤除外)路径表达式 包含一个原子值。

让我们来看看你的表情:

$users_doc/user/userid=$userid/.. 

最后一步的左项是一个节点设置比较:

$users_doc/user/userid=$userid 

因此,它会导致真或假的布尔值(原子值)。当然,你不能选择的真或假的parent::node() ...

你要这个表达式:

$users_doc/user[userid=$userid]