XPath序列之四

** 1.3.4 ** ** 基本表达式 ** ** **

除了定位路径表达式外,还有许多其它的基本表达式结构包括布尔、等式、关系和数值表达式。这些表达式可以用于结果对象不需要时节点集的任何情况中。它们通常用于 XPath 谓词和各种 XSLT 结构中。

XPath 支持标准的 and/or 布尔表达式,表达式的每个操作数强制转换为布尔值后求值。

等式表达式测试两个对象是否相等,其操作符有 = 和 != 。

关系表达式是的两个对象之间的关系比较成为可能,其操作符为 <= 、 < 、 >= 和 > 。关系表达式的求值是通过将两个操作数转换为数值后进行比较求得的。

以下这段话定义了等式表达式和关系表达式中结果对象的比较方法:

如果被比较的两个对象是节点集合,那么,其比较结果为真当且仅当在两个节点集合中各有一个节点,并且,比较这两个节点的字串值的结果为真。如果被比较的一个对象是节点集合而另一个是数值,其比较结果为真当且仅当在节点集合中有一节点,并且,用函数 number 将该节点的字串值转换为数值与被比较的数值相同。如果被比较的一个对象是节点集合而另一个是字符串,其比较结果为真当且仅当在节点集合中有一节点,并且该节点的字串值与另一个的字符串相等。如果被比较的一个对象是节点集合而另一个是布尔类型,其比较结果为真当且仅当在节点集合中有一节点,并且,用函数 boolean 将该节点转换成的布尔类型与被比较的布尔类型相等。

当两个被比较的对象都不是节点集合,而且,操作符为 = 或 != ,那么,比较这类对象时,按以下方式将它们转换成常见类型然后再比较。如果被比较的对象中至少有一个是布尔类型,那么,每一个被比较的对象都要转换成布尔类型,就像调用了 boolean 函数一样。不然的话,如果至少有一个是数字,那么,每一个被比较的对象都要转换成数字,就像调用了 number 函数一样。再不然的话,两个对象都转换成字符串,就像调用了 string 函数一样。 = 的比较为真,当且仅当在对象是相等的; != 的比较为真,当且仅当在对象是不相等的。数字相等的比较依照 IEEE 754 标准。两个布尔类型相等,当且仅当它们都为真或都为假。两个字符串相等,当且仅当它们都由同样序列的 UCS 字符组成。

当两个被比较的对象都不是节点集合,而且,操作符为 <= , < , >= 或 > ,那么,要比较的对象都转换成数字并依照 IEEE 754 进行比较。 < 的比较为真,当且仅当第一个数小于第二个数。 > 的比较为真,当且仅当第一个数大于第二个数。 >= 的比较为真,当且仅当第一个数大于或等于第二个数。

数值表达式是的实现基本数学操作成为可能,可以使用的操作符有: + 、 - 、 div 、 mod 、 * 、 -(一元操作符)。其计算是在每个操作数转换为数值后进行求值。

-----------------------------to be continued-----------------------------------

Published At
Categories with Web编程
Tagged with
comments powered by Disqus