2010-11-06 89 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]