您可以将 ROW 和 LIST 与其他 ROW 和 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 ...下列 XML 输入消息主体将使上述两个语句中的 IF 表达式的求值结果为 TRUE:
<Data> <Name>Raf</Name> <Age>25</Age> </Data>在 ROW 之间比较时,会比较每个元素的名称和值;但在 LIST 之间比较时,只比较每个元素的值。在这两种情况下,被比较的 LIST 或 ROW 操作数的基数和顺序必须相等,以便使两个操作数相等。换句话说,下列都为假,因为比较的操作数顺序或基数不匹配:
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 ...下列 XML 输入消息主体使上述 IF 表达式的求值结果为 TRUE:
<Places> <first>Ken</first> <second>Bob</second> <third>Kate</third> </Places>
显式构造的 ROW 的存在作为对比较运算符的操作数之一,导致其他操作数也视为一个 ROW。
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...其比较 FirstDraw 和 SecondDraw 字段的值,而不是每个 FirstDraw 和 SecondDraw 子字段的名称和值构造成的一个 ROW。因此 XML 输入消息主体,如:
<Lottery> <FirstDraw>wednesday <ball1>32</ball1> <ball2>12</ball2> </FirstDraw> <SecondDraw>saturday <ball1>32</ball1> <ball2>12</ball2> </SecondDraw> </Lottery>将不会导致上述 IF 表达式的求值结果为 TRUE,因为正在比较值“wednesday”和“saturday”,而不是 ball 字段的名称和值。
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...下列 XML 输入消息主体使 IF 表达式的求值结果为 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 ...下列 XML 输入消息主体使上述第一个和第三个语句的 IF 表达式求值为 TRUE:
<Cities> <Mediaeval>1350 <City>London</City> <City>Paris</City> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>但是,第二个语句的 IF 表达式将求值为 FALSE,因为 *[] 表明将比较 Mediaeval 和 Modern 的所有子代,而不只是 (XML.Element)。在这种情况下,比较值 1350 和 1990(它们形成 Mediaeval 和 Modern 的无名子代)以及 City 标记的值。
<Cities> <Mediaeval>1350 <Location>London</Location> <Location>Paris</Location> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>LIST 由未命名的值组成。它是作比较的 Mediaeval 和 Modern 的子字段值,而不是它们的名称。