我希望在XQuery中创建一个没有if
部分的else
语句。
例如:
<results>
{
if (5 = 5) then
<foo/>
}
<results>
我该怎么做?
我也试过这个:
<results>
{
if (5 = 5) then
<foo/>
else
return
}
<results>
虽然编译,但在运行时不起作用!
答案 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
如果相乘,则空字符串""
用于连接不带分隔符的字符串,空序列如果使用分隔符加入字符串,...
return
语句&#34; 使用&#34;空&#34;返回是不可能的,但在当前上下文中返回<return/>
个子元素,因此else return
仅仅是else ./return
。如果当前上下文确实有<return/>
个孩子,那么这不仅会失败(并返回一些东西),而且如果没有任何上下文被绑定,也会失败。
返回空字符串不返回任何内容,而是返回空字符串,这是一个值,甚至可能会破坏在其他位置的输入。返回空字符串不是一般解决方案,但可能在某些特定情况下。
答案 1 :(得分:2)
您可以使用过滤器表达式:
<results>
{
<foo/> [5 = 5]
}
</results>