在for循环中使用if条件的XQuery

时间:2015-03-10 12:25:12

标签: xquery marklogic exist-db

我已经编写了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.

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

2 个答案:

答案 0 :(得分:3)

试试这个:

<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可能还有很多工作要做,但这是另一回事。

答案 1 :(得分:1)

您还可以使用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>