18

我正在尝试使用 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] Incomplete 'if' 表达式错误。有人可以帮我解决这个问题吗?

另外,有人可以建议一些好的教程来学习xquery。

谢谢,索尼

4

1 回答 1

20

这是因为在 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 教程。W3CSchools的 XQuery Tutorial是一个很好的起点。

于 2010-09-10T18:44:26.603 回答