在 for 循环中带有 if 条件的 XQuery
XQuery with if condition in for loop
我已经以正常方式将 xquery 写入 return 结果。
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.
我试过几种方法。但无法 运行 查询..
试试这个:
<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
可能有很多工作要做,但这是另一回事。
您也可以使用 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>
我已经以正常方式将 xquery 写入 return 结果。
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.
我试过几种方法。但无法 运行 查询..
试试这个:
<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
可能有很多工作要做,但这是另一回事。
您也可以使用 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>