как использовать if else в назначении xquery
Я пытаюсь использовать условие if для присвоения значения переменной в xquery. Я не знаю, как это сделать.
Это то, что я пробовал:
declare namespace libx='http://libx.org/xml/libx2';
declare namespace atom='http://www.w3.org/2005/Atom';
declare variable $entry_type as xs:string external;
let $libx_node :=
if ($entry_type = 'package' or 'libapp') then
{element {fn:concat("libx:", $entry_type)} {()} }
else if ($entry_type = 'module') then
'<libx:module>
<libx:body>{$module_body}</libx:body>
</libx:module>'
этот код выдает ошибку [XPST0003] неполное выражение "if". Кто-нибудь может помочь мне это исправить?
кроме того, кто-то может предложить некоторые хорошие учебники для изучения xqueries.
спасибо, Сони!--2-->
1 ответов
это потому, что в XQuery спецификация условное выражение else-expression обязательно:
[45] IfExpr ::= "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle
так что вы должны написать второй else
предложение (например, оно может возвращать пустую последовательность):
declare namespace libx='http://libx.org/xml/libx2';
declare namespace atom='http://www.w3.org/2005/Atom';
declare variable $entry_type as xs:string external;
let $libx_node :=
if ($entry_type = ('package','libapp')) then
element {fn:concat("libx:", $entry_type)} {()}
else if ($entry_type = 'module') then
<libx:module>
<libx:body>{$module_body}</libx:body>
</libx:module>
else ()
... (your code here) ...
некоторые очевидные ошибки также исправлены:
- не требуется {} вокруг конструктора вычисляемого элемента;
- скорее всего, вы хотите
if($entry_type = ('package', 'libapp'))
По Поводу Языка XQuery учебные пособия. The учебник W3cschools по XQuery является довольно хорошей отправной точкой.