XML 中的 Xquery 获取元素仅获得一个响应

Obtain only one response from Xquery fetching elements in XML

我想在响应 XML 中查找特定节点,并且 return 是真还是假,取决于它是否匹配条件。我该怎么做才能只收到一个唯一的节点响应,而不是 XML 包含的元素那么多?

这是我的 Xquery 代码:

for $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
        return
          if ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
              $recordRetrieved/ns0:DAT <= $dat)
          then <ns2:func>{ true() }</ns2:func>
          else <ns2:func>{ false() }</ns2:func

使用此代码,如果 XML 包含 3 个元素 $sA_ADS_VerifOutput1/ns0:recordRetrieved,响应将是(例如):

<ns2:func>false</ns2:func>
<ns2:func>false</ns2:func>
<ns2:func>true</ns2:func>

我不想要这个,但如果全部都是假的,我希望 <ns2:func>false</ns2:func> 如果至少有一个是真的我希望 <ns2:func>true</ns2:func>,只有一次。

我考虑过使用where子句,但如果没有元素满足条件,我需要emerge false。

谢谢。

您可以使用 fn:distinct-values() 来消除重复项,然后将它们包装在需要的元素中。

fn:distinct-values(
    for $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
    return
        if ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
            $recordRetrieved/ns0:DAT <= $dat)
        then true()
        else false()
) ! <ns2:func>{.}</ns2:func>

你想要:

some $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
   satisfies ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
              $recordRetrieved/ns0:DAT <= $dat)

或更简单地说

exists($sA_ADS_VerifOutput1/ns0:recordRetrieved[
        ns0:COD_NRBE_EN = $ent and ns0:DAT <= $dat])