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

时间:2015-12-02 14:03:32

标签: xpath xquery saxon xquery-3.0

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

例如:

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

我该怎么做?

我也试过这个:

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

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

2 个答案:

答案 0 :(得分:7)

没有if的XQuery中没有else个语句。返回空序列而不是(),或任何合理的identity element(如果没有定义任何具体内容,通常会要求这样做。)

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

与过程语言相比,其中&#34; no else 语句&#34;只是意味着什么都不做&#34; XQuery是一种函数式语言,它也意味着每个操作都必须具有&#34;某些东西&#34;回。怎么办&#34;没什么&#34;? 可能已经可以声明&#34;没有else语句意味着返回空序列而不是#34;但是W3C XML查询工作组似乎已经决定要求明确定义什么也没有回来。总而言之,这会让您更容易理解并且可能更好的代码,因为您必须考虑&#34; else&#34;返回的价值是;因为可能存在很多合理的值:0如果您正在添加某些内容,1如果相乘,则空字符串""用于连接不带分隔符的字符串,空序列如果使用分隔符加入字符串,...

不要使用&#34;空return语句&#34;

使用&#34;空&#34;返回是不可能的,但在当前上下文中返回<return/>个子元素,因此else return仅仅是else ./return。如果当前上下文确实有<return/>个孩子,那么这不仅会失败(并返回一些东西),而且如果没有任何上下文被绑定,也会失败。

不要返回空字符串

返回空字符串不返回任何内容,而是返回空字符串,这是一个值,甚至可能会破坏在其他位置的输入。返回空字符串不是一般解决方案,但可能在某些特定情况下。

答案 1 :(得分:2)

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

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