在 for 循环中带有 if 条件的 XQuery

Posted

技术标签:

【中文标题】在 for 循环中带有 if 条件的 XQuery【英文标题】:XQuery with if condition in for loop 【发布时间】:2015-05-11 21:20:01 【问题描述】:

我已经编写了 xquery 以正常方式返回结果。

let $results := //data:data
return 
  <result>
  
    for $i in $results
    return
      <documentInformation>
        <id>data($i/DATA:ID)</id>
        <status>data($i/@status)</status>
        <title>data($i/data:title)</title>
        <displayName>data($i/DATA:DISPLAYNAME)</displayName>
      </documentInformation>
  
  </result>

现在,我必须过滤掉 在 for 循环中使用某些条件的结果,例如

(pseudo logic)
if id = 'abc' and status ="closed"  
then skip the row
else add row.

我尝试了几种方法。但无法运行查询..

【问题讨论】:

请阅读How to post an SSCCE 和How to Ask。您的问题缺少示例输入,这将导致长时间的讨论(“仍然对我不起作用”)或使问题几乎无法回答。无论如何,我很确定您根本不需要 if 语句,看看谓词和 where 子句,它们都是 very 基本和重要的 XQuery 语言结构。不要写“我已经尝试了几种方法”。发布您尝试过的什么,以及它是如何失败的! 【参考方案1】:

试试这个:

<result>

  for $i in //data:data
  where fn:not($i/DATA:ID = 'abc' and $i/@status = "closed")
  return
    <documentInformation>
      <id>data($i/DATA:ID)</id>
      <status>data($i/@status)</status>
      <title>data($i/data:title)</title>
      <displayName>data($i/DATA:DISPLAYNAME)</displayName>
    </documentInformation>

</result>

请注意,XPath //data:data 可能有很多工作要做,但这是另一回事。

【讨论】:

可能有助于注意几个替代方案。在某些情况下,编写谓词而不是 where 子句可能更有效:for $i in //data:data[not(DATA:ID = 'abc') and @status = "closed")]。在其他情况下,嵌套在返回中很方便,如return if not($i/DATA:ID = 'abc' and $i/@status = "closed") then $a else $b【参考方案2】:

您也可以使用if 条件代替where

<result>

    for $i in //data:data
    return 
        if($i/DATA:ID != 'abc' and $i/@status != "closed")
        then
        (
            <documentInformation>
            <id>data($i/DATA:ID)</id>
            <status>data($i/@status)</status>
            <title>data($i/data:title)</title>
            <displayName>data($i/DATA:DISPLAYNAME)</displayName>
            </documentInformation>
        )
        else ()

</result>

【讨论】:

你能在标签周围加一个 iff 吗?

以上是关于在 for 循环中带有 if 条件的 XQuery的主要内容,如果未能解决你的问题,请参考以下文章

在带有许多 if 语句的 for 循环中使用 continue 时性能是不是有所提高?

带有if条件的生成器上的python列表理解

XQuery 让让输出

我们可以在批处理脚本的 for 循环中使用 IF 条件吗?

Linux | shell脚本-条件判断if和循环语句for

python if 判断 while 循环 for 循环