假设我有两个表达式://div[@class="foo"]
和//span[@class="foo"]
。是否可以“组合”它们,如下所示:
//(div | span)[@class="foo"]
或者我可以只使用两个完整表达式的并集吗?
//div[@class="foo"] | //span[@class="foo"]
答案 0 :(得分:2)
使用div
获取所有span
和class="foo"
元素的更惯用(并且我敢说可读)的方法是这样的:
//*[(self::div or self::span) and @class="foo"]
英文:
选择本身为div或span的所有元素,并且具有值为'foo'的class属性
至于您的原始问题,以下表达式返回等效结果:
(//div | //span)[@class="foo"]
//div[@class="foo"] | //span[@class="foo"]
第一个为您提供了文档中所有div
和span
元素的并集,进一步过滤以仅包含class="foo"
的元素,而后者则为1)具有div
的所有class="foo"
元素的集合和2)具有span
的所有class="foo"
元素的集合。
很明显,这两组包含相同的东西。
答案 1 :(得分:1)
此构造有效:
(//golfer | //batter)[@ID="2" or @ID="3"]
......令我惊讶的是。