4

我希望在 XQuery中创建一个if没有部分的语句。else

例如:

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

我该怎么做呢?

我也试过这个:

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

虽然可以编译,但在运行时不起作用!

4

2 回答 2

8

ifXQuery中没有没有else. 而是返回空序列(),或任何合理的标识元素(如果未定义任何特定元素,这通常是您需要的)。

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

与过程语言相比,“no else statement”仅仅意味着“什么都不做” XQuery 是一种函数式语言,这也意味着每个操作都必须返回“某物”。如何进行“无”?可能可以声明“没有else语句意味着返回空序列”,但 W3C XML 查询工作组似乎已经决定要求明确定义不返回任何内容。总而言之,这会导致更容易理解并且可能更好的代码,因为您必须考虑要返回的“else”值是什么;因为可能有很多合理的值:0如果你加起来,1如果相乘,空字符串""用于连接不带分隔符的字符串,如果连接分隔符的字符串,则为空序列,...

不要使用“空return语句”

使用“空”返回是不可能的,而是返回<return/>当前上下文中的子元素,所以else return仅仅是一个else ./return. <return/>如果当前上下文确实有孩子,而且如果根本没有绑定任何上下文,这不仅会失败(并返回一些东西) 。

不要返回空字符串

返回一个空字符串不会返回任何内容,而是返回空字符串,它是一个值,甚至可能会在另一个地方打断打字。返回空字符串不是一般的解决方案,但可能在某些特定情况下。

于 2015-12-02T14:47:37.670 回答
2

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

<results>
   { 
       <foo/> [5 = 5]
   }
</results>
于 2015-12-02T16:44:49.617 回答