- 比较
要在 XPath 中比较两个对象,可以使用 = 测试是否相等,也可以使用 != 测试是否不相等。
对于比较运算,必须正好提供两个操作数。比较的过程是计算每个操作数,然后根据需要将操作数转换为相同的类型。按照下面的“比较的优先级顺序”中所 述的过程完成比较。
所有元素和属性都是字符串,但是在进行数字比较时会自动被强制转换为整数值。在比较运算期间,文本数值会被强制转换为 long 或 double 类型,如下表所示。
文本类型 | 比较 | 示例 |
---|---|---|
String | text(lvalue) op text(rvalue) | a < GGG |
Integer | (long) lvalue op (long) rvalue | a < 3 |
Real | (double) lvalue op (double) rvalue | a < 3.1 |
表达式 | 引用 |
---|---|
author[last-name = "Bob"] | 至少包含一个值为 Bob 的 <last-name> 元素的所有 <author> 元素。 |
author[last-name[1] = "Bob"] | 第一个 <last-name> 子元素的值为 Bob 的所有 <author> 元素。 |
author/degree[@from != "Harvard"] | 包含 from 属性不等于 "Harvard" 的 <degree> 元素的所有 <author> 元素。 |
author[last-name = /editor/last-name] | 包含与根元素下 <editor> 元素中的 <last-name> 元素相同的 <last-name> 元素的所有 <author> 元素。 |
author[. = "Matthew Bob"] | 所有字符串值为 Matthew Bob 的 <author> 元素。 |
比较的优先级顺序
与数据类型有关的比较遵循下列优先级顺序。
-
如果至少有一个操作数为布尔值,每个操作数必须先转换为布尔值。
-
否则,如果至少有一个操作数为数字,每个操作数必须先转换为数字。
-
否则,如果至少有一个操作数为日期,每个操作数必须先转换为日期。
-
否则,两个操作数都先转换为字符串。