XPath组合节点集

时间:2013-12-22 01:45:42

标签: xpath

假设我有两个表达式://div[@class="foo"]//span[@class="foo"]。是否可以“组合”它们,如下所示:

//(div | span)[@class="foo"]

或者我可以只使用两个完整表达式的并集吗?

//div[@class="foo"] | //span[@class="foo"]

2 个答案:

答案 0 :(得分:2)

使用div获取所有spanclass="foo"元素的更惯用(并且我敢说可读)的方法是这样的:

//*[(self::div or self::span) and @class="foo"] 

英文:

  

选择本身为div或span的所有元素,并且具有值为'foo'的class属性

至于您的原始问题,以下表达式返回等效结果:

  1. (//div | //span)[@class="foo"]
  2. //div[@class="foo"] | //span[@class="foo"]
  3. 第一个为您提供了文档中所有divspan元素的并集,进一步过滤以仅包含class="foo"的元素,而后者则为1)具有div的所有class="foo"元素的集合和2)具有span的所有class="foo"元素的集合。

    很明显,这两组包含相同的东西。

答案 1 :(得分:1)

此构造有效:

(//golfer | //batter)[@ID="2" or @ID="3"]

......令我惊讶的是。