Sie können Zeilen (ROW) und Listen (LIST) mit anderen Zeilen und Listen vergleichen.
IF ROW(InputBody.Data.*[1],InputBody.Data.*[2]) = ROW('Raf' AS Name,'25' AS Age) THEN ... IF LIST{InputBody.Data.Name, InputBody.Data.Age} = LIST{'Raf','25'} THEN ...Mit dem folgenden Hauptteil der XML-Eingabenachricht ergeben beide IF-Ausdrücke in beiden obigen Anweisungen den Wert TRUE:
<Data> <Name>Raf</Name> <Age>25</Age> </Data>Bei dem Vergleich von Zeilen werden die Namen und die Werte der einzelnen Elemente verglichen, während bei dem Vergleich von Listen nur die Werte der einzelnen Elemente verglichen werden. In beiden Fällen müssen die Kardinalität und die Reihenfolge der LIST- oder ROW-Operanden, die verglichen werden, identisch sein, damit die beiden Operanden identisch sind. In allen folgenden Beispielen ist dies nicht der Fall, da entweder die Reihenfolge oder die Kardinalität der Operanden, die verglichen werden, nicht übereinstimmt:
ROW('alpha' AS A, 'beta' AS B) = ROW('alpha' AS A, 'beta' AS B, 'delta' AS D) ROW('alpha' AS A, 'beta' AS B) = ROW('beta' AS B,'alpha' AS A) LIST{1,2,3} = LIST{1,2,3,4} LIST{3,2,1} = LIST{1,2,3}
IF InputBody.Places = ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...Mit dem folgenden Hauptteil der XML-Eingabenachricht ergibt der obige IF-Ausdruck den Wert TRUE:
<Places> <first>Ken</first> <second>Bob</second> <third>Kate</third> </Places>
Wenn einer der Operanden des Vergleichsoperators eine explizit konstruierte Zeile (ROW) ist, wird der andere Operand ebenfalls als Zeile behandelt.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...Hier werden die Werte der Felder 'FirstDraw' und 'SecondDraw' verglichen, nicht die Namen und Werte der einzelnen untergeordneten Felder von 'FirstDraw' und 'SecondDraw', die als Zeile konstruiert sind. Deshalb würde folgender Hauptteil einer XML-Eingabenachricht:
<Lottery> <FirstDraw>wednesday <ball1>32</ball1> <ball2>12</ball2> </FirstDraw> <SecondDraw>saturday <ball1>32</ball1> <ball2>12</ball2> </SecondDraw> </Lottery>nicht den obigen IF-Ausdruck mit dem Ergebnis TRUE ergeben, da die Werte 'wednesday' und 'saturday' verglichen werden und nicht die Namen und Werte der 'ball'-Felder.
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...Mit dem folgenden Hauptteil der XML-Eingabenachricht ergibt der IF-Ausdruck den Wert TRUE:
<Cities> <City>Athens</City> <City>Sparta</City> <City>Thebes</City> </Cities>
IF InputBody.Cities.Mediaeval.City[] = InputBody.Cities.Modern.City[] THEN ... IF InputBody.Cities.Mediaeval.*[] = InputBody.Cities.Modern.*[] THEN ... IF InputBody.Cities.Mediaeval.(XML.Element)[] = InputBody.Cities.Modern.(XML.Element)[] THEN ...Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der IF-Ausdruck der ersten und dritten Anweisung zu dem Ergebnis TRUE:
<Cities> <Mediaeval>1350 <City>London</City> <City>Paris</City> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>Der IF-Ausdruck der zweiten Anweisung führt jedoch zu dem Ergebnis FALSE, weil *[] bedeutet, dass alle untergeordneten Elemente von 'Mediaeval' und 'Modern' verglichen werden sollen, nicht nur die (XML.Element)-Elemente. In diesem Fall werden die Werte '1350' und '1990', bei denen es sich um nicht benannte, untergeordnete Elemente von 'Mediaeval' und 'Modern' handelt, ebenso verglichen wie die Werte der 'City'-Tags.
<Cities> <Mediaeval>1350 <Location>London</Location> <Location>Paris</Location> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>LISTs werden aus nicht benannten Werten erstellt. Es werden die Werte der untergeordneten Felder von 'Mediaeval' und 'Modern' verglichen, nicht deren Namen.