Puede comparar ROW y LIST con otros ROW y LIST.
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 ...Con el texto del mensaje de entrada XML siguiente las dos expresiones IF de las dos sentencias anteriores se evalúan como TRUE:
<Data> <Name>Raf</Name> <Age>25</Age> </Data>En las comparaciones entre ROW, se comparan tanto el nombre como el valor de cada elemento. En las comparaciones entre LIST solamente se compara el valor de cada elemento. En ambos casos, la cardinalidad y el orden secuencial de los operandos LIST o ROW que se están comparando deben tener el mismo orden para que los dos operandos sean iguales. En otras palabras, el valor de todos los siguientes es false porque o bien el orden secuencial o bien la cardinalidad de los operandos que se están comparando no coincide.
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 ...Con el texto de mensaje de entrada XML siguiente, la expresión IF anterior se evalúa como TRUE:
<Places> <first>Ken</first> <second>Bob</second> <third>Kate</third> </Places>
La presencia de ROW creado de forma explícita como uno de los operandos del operador de comparación da como resultado que el otro operando se trate como ROW.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...lo cual compara el valor de los campos FirstDraw y SecondDraw y no los nombres y los valores de cada uno de los campos hijo FirstDraw y SecondDraw creados como ROW. De este modo, un texto de mensaje de entrada XML como, por ejemplo:
<Lottery> <FirstDraw>wednesday <ball1>32</ball1> <ball2>12</ball2> </FirstDraw> <SecondDraw>saturday <ball1>32</ball1> <ball2>12</ball2> </SecondDraw> </Lottery>no hará que la expresión IF anterior se evalúe como TRUE, debido a que se están comparando los valores wednesday y saturday y no los nombres y valores de los campos ball.
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...Con el texto de mensaje de entrada XML siguiente, la expresión IF anterior se evalúa como 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 ...Con el texto de mensaje de entrada XML siguiente, la expresión IF anterior de la primera y tercera sentencia se evalúa como TRUE:
<Cities> <Mediaeval>1350 <City>London</City> <City>Paris</City> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>No obstante, la expresión IF de la segunda sentencia se evalúa como FALSE, debido a que con *[] se indica que todos los hijos de Mediaeval y Modern se deben comparar y no simplemente (XML.Element). En este caso, los valores 1350 y 1990, que forman hijos sin nombre de Mediaeval y Modern, se comparan también como los valores de los códigos City.
<Cities> <Mediaeval>1350 <Location>London</Location> <Location>Paris</Location> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>LIST consta de valores sin nombre. Son los valores de los campos hijo de Mediaeval y Modern los que se comparan y no los nombres.