2016-04-09 10 views
0

Ich möchte nach einem bestimmten Knoten in einer Antwort-XML suchen und true oder false zurückgeben, je nachdem, ob eine Bedingung erfüllt ist. Wie kann ich das tun, um nur eine eindeutige Knotenantwort zu erhalten und nicht so viele Elemente wie XML?Beziehen Sie nur eine Antwort von Xquery-Abrufelementen in XML.

Hier ist mein XQuery-Code:

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 

mit diesem Code, wenn die XML-3 Elemente enthält $sA_ADS_VerifOutput1/ns0:recordRetrieved die Antwort wird (zum Beispiel) sein:

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

ich dies nicht wünschen , aber wenn alle falsch sind, erwarte ich <ns2:func>false</ns2:func> und wenn mindestens eins wahr ist erwarte ich <ns2:func>true</ns2:func>, nur einmal.

Ich dachte über die where Klausel, aber ich muss falsch hervorkommen, wenn kein elemet die Bedingung erfüllt.

Danke.

Antwort

5

Sie wollen:

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

oder einfacher

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

Vielen Dank! Das ist großartig. –

1

Sie könnten fn: distinct-values ​​() verwenden, um Duplikate zu entfernen, und dann in die benötigten Elemente einbinden.

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>