【问题标题】:How to create an if statement without an else in XQuery?如何在 XQuery 中创建没有 else 的 if 语句?
【发布时间】:2015-12-02 14:03:31
【问题描述】:

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

例如:

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

我该怎么做?

我也试过这个:

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

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

【问题讨论】:

    标签: xpath xquery saxon xquery-3.0


    【解决方案1】:

    没有else,XQuery 中就没有if 语句。返回空序列而不是 (),或任何合理的 identity element(如果未定义任何具体内容,通常是您需要的)。

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

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

    不要使用“空的return 语句”

    不可能使用“空”返回,而是在当前上下文中返回&lt;return/&gt; 子元素,因此else return 只是else ./return。如果当前上下文确实有 &lt;return/&gt; 子级,而且根本没有绑定任何上下文,这不仅会失败(并返回一些东西)。

    不要返回空字符串

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        • 2011-07-20
        • 1970-01-01
        相关资源
        最近更新 更多