从Xquery获取XML中的元素只获取一个响应

时间:2016-04-09 19:37:31

标签: xml xquery osb

我想在Response XML中查找特定节点,并返回true或false,具体取决于它是否与条件匹配。我该怎么做才能只接收一个唯一的节点响应,而不是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子句,但如果没有elemet符合条件,我需要显示false。

感谢。

2 个答案:

答案 0 :(得分:5)

你想:

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])

答案 1 :(得分:1)

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