如何在 XQuery 中创建没有 else 的 if 语句?

How to create an if statement without an else in XQuery?

我希望在 XQuery 中创建不带 else 部分的 if 语句。

例如:

<results>
   { 
   if (5 = 5) then
       <foo/>
   }
<results>

我该怎么做?

我也试过这个:

<results>
   { 
   if (5 = 5) then
       <foo/>
   else
       return
   }
<results>

虽然可以编译,但在 运行!

时不起作用

在没有 else 的情况下,XQuery 中没有 if 个语句。 Return 空序列而不是 (),或任何合理的 identity element(如果没有定义任何特定内容,这通常是您需要的)。

if ($foo eq "bar")
then
  42
else
  ()

与过程语言相反,其中 "no else statement" 仅表示 "do nothing" XQuery 是一种函数式语言,这也意味着每个操作都必须 "something" returned。如何进行"nothing"? 可能 可以声明 "no else statement means returning the empty sequence instead",但是 W3C XML 查询工作组似乎已经决定要求明确定义 return 什么都不做.总而言之,这会使代码更容易理解并且可能会更好,因为您必须考虑 return 的 "else" 值是什么;因为可能有很多合理的值:0 如果你加起来,1 如果相乘,空字符串 "" 用于连接没有分隔符的字符串,空序列如果连接字符串 with 分隔符,...

不要使用"empty return statements"

使用 "empty" return 是不可能的,但是 returns <return/> children 元素在当前上下文中代替,所以 else return 只是一个 else ./return。如果当前上下文确实有 <return/> children,这不仅会失败(和 return 某些东西),而且如果根本没有绑定任何上下文。

不要return空字符串

Return 一个空字符串不会 return 什么都没有,但是 空字符串 ,它是一个值,甚至可能会在另一个地方中断输入. Return空字符串不是通用的解决方案,但在某些特定情况下可能是。

您可以改用过滤器表达式:

<results>
   { 
       <foo/> [5 = 5]
   }
</results>