在for循环中使用if条件的XQuery
我编写了xquery以正常方式返回结果在for循环中使用if条件的XQuery,xquery,marklogic,exist-db,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>
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>
我试过几种方法。但无法运行查询。请尝试以下操作:
<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>
{
对于//数据中的$i:data
其中fn:not($i/DATA:ID='abc'和$i/@status=“closed”)
回来
{data($i/data:ID)}
{data($i/@status)}
{data($i/data:title)}
{data($i/data:DISPLAYNAME)}
}
请注意,XPath//data:data
可能有很多工作要做,但这是另一回事 试试这个:
<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>
{
对于//数据中的$i:data
其中fn:not($i/DATA:ID='abc'和$i/@status=“closed”)
回来
{data($i/data:ID)}
{data($i/@status)}
{data($i/data:title)}
{data($i/data:DISPLAYNAME)}
}
请注意,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>
{
对于//数据中的$i:data
回来
如果($i/DATA:ID!=“abc”和$i/@status!=“已关闭”)
然后
(
{data($i/data:ID)}
{data($i/@status)}
{data($i/data:title)}
{data($i/data:DISPLAYNAME)}
)
else()
}
您也可以使用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>
{
对于//数据中的$i:data
回来
如果($i/DATA:ID!=“abc”和$i/@status!=“已关闭”)
然后
(
{data($i/data:ID)}
{data($i/@status)}
{data($i/data:title)}
{data($i/data:DISPLAYNAME)}
)
else()
}
请阅读并确认。您的问题缺乏示例输入,这将导致长时间的讨论(“对我来说仍然不起作用”),或者使问题几乎无法回答。无论如何,我非常确定您根本不需要if语句,请看一下谓词和where子句,它们都是非常基本和重要的XQuery语言构造。不要写“我已经尝试了几种方法”。发布你的尝试,以及它是如何失败的!请阅读和阅读。您的问题缺乏示例输入,这将导致长时间的讨论(“对我来说仍然不起作用”),或者使问题几乎无法回答。无论如何,我非常确定您根本不需要if语句,请看一下谓词和where子句,它们都是非常基本和重要的XQuery语言构造。不要写“我已经尝试了几种方法”。发布你的尝试,以及它是如何失败的!请注意几个备选方案可能会有所帮助。在某些情况下,在//data:data[not(data:ID='abc')和@status=“closed”)]中为$i编写谓词而不是where子句可能更有效。在其他情况下,可以方便地嵌套在return中,因为return如果没有($i/DATA:ID='abc'和$i/@status=“closed”),那么$a else$b
可能有助于注意几个备选方案。在某些情况下,在//data:data[not(data:ID='abc')和@status=“closed”)]中为$i编写谓词而不是where子句可能更有效。在其他情况下,可以方便地嵌套在返回中,因为return如果没有($i/DATA:ID='abc'和$i/@status=“closed”),那么$a或者$b