2017-03-14 3 views
0
<Response xmlns="https://**********/token"> 
    <rows> 
     <e> 
     <e>1,4507</e> 
     <e>1</e> 
     <e>2017-02-28T05:10:32.0606654Z</e> 
     <e>2017-02-28T05:10:32.2267838Z</e> 
     <e>Depart</e> 
     <e>Depart</e> 
     <e>acct: xxx on 10/2/2015</e> 
     <e>16.666131292069704</e> 
     <e null="true"/> 
     <e>Open</e> 
     <e null="true"/> 
     <e null="true"/> 
     <e null="true"/> 
     </e> 
     <e> 
     <e>1,4507</e> 
     <e>2</e> 
     <e>2017-02-28T05:10:32.0606654Z</e> 
     <e>2017-02-28T05:10:32.2267838Z</e> 
     <e>Depart</e> 
     <e>Depart</e> 
     <e>acct: xxx on 10/2/2015</e> 
     <e>16.666131292069704</e> 
     <e null="true"/> 
     <e>Open</e> 
     <e null="true"/> 
     <e null="true"/> 
     <e null="true"/> 
     </e> 
    </rows> 
    <skip>0</skip> 
    <take>126</take> 
</Response> 

die oben ist mein xml Antwort:Wie wird der XQuery-Pfad iteriert?

Ich wollte jede Zeile zu überprüfen, ob Status Offen ist.

öffnen

declare namespace ns1='https://**********/token'; 
<Result> 
for $x in //ns1:Response[1]/ns1:rows[1] 
return data($x/ns1:e[1]/ns1:e[10]/text()) 
</Result> 

aber es kehrt nicht den Wert .. Es gibt nur die folgenden in dem erwarteten Ergebnis.

<Result>for $x in //ns1:Response[1]/ns1:rows[1] 
return data($x/ns1:e[1]/ns1:e[2]/text())</Result> 

Ist es korrekt xquery Ausdruck? wäre hilfreich, wenn einige dies überprüfen?

Antwort

1

Sie Ihre XQuery-Ausdruck in {} sonst wird es werden so behandelt, als Stringliteral wickeln sollte:

declare namespace ns1='https://**********/token'; 
<Result> 
{ 
    for $x in //ns1:Response[1]/ns1:rows[1] 
    return data($x/ns1:e[1]/ns1:e[10]/text()) 
} 
</Result> 

demo

Ausgang:

<Result>Open</Result> 

Es ist jedoch nicht klar, was genau die erwartete Ausgabe ist, da Sie für jeden Pfadschritt einen exakten Index verwendet haben, der dazu führt, dass der Ausdruck nur einem Element gleichzeitig entspricht ...

1

Wenn Sie nur wollen zu wissen, dass jede Zeile hat e[10] = "Open" dann können Sie tun:

<Result>{empty(/ns1:Rows/*/*[10][.!="Open"])}</Result> 

(Ihre Frage Titel spricht von Iterieren. Das ist verfahrensmäßiges Denken. In XQuery arbeiten Sie wie in SQL im Allgemeinen direkt mit Sätzen von Elementen: Sie müssen nicht über sie iterieren, um sie einzeln zu verarbeiten.)

+0

das klingt für mich korrekt, da ich Assertion machen muss .. :) – ChanGan

Verwandte Themen