исключение xquery [XPTY0019] - PullRequest
       4

исключение xquery [XPTY0019]

1 голос
/ 06 ноября 2010

Я использую следующий XML-файл (users_doc.xml)

<users>
  <user trusted="false">
    <userid>vsony7@vt.edu</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, $ userid = 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.

Как это исправить?

Спасибо, Sony

1 Ответ

2 голосов
/ 07 ноября 2010

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

ошибка: XPTY0019

Ошибка типа, если результат шага (отличный от последнего шага) ввыражение пути содержит атомарное значение.

Давайте посмотрим на ваше выражение:

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

Левый член последнего шага - это сравнение набора узлов:

$users_doc/user/userid=$userid

Таким образом, это приведет к истинному или ложному логическому значению (атомарному значению).Конечно, вы не можете выбрать parent::node() true или false ...

Вы хотите это выражение:

$users_doc/user[userid=$userid]
...