Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath组合节点集_Xpath - Fatal编程技术网

XPath组合节点集

XPath组合节点集,xpath,Xpath,假设我有两个表达式://div[@class=“foo”]和//span[@class=“foo”]。是否可以“组合”它们,如: //(div | span)[@class="foo"] 或者我只能取两个完整表达式的并集 //div[@class="foo"] | //span[@class="foo"] 这项工程: (//golfer | //batter)[@ID="2" or @ID="3"] …这让我大吃一惊。获取所有div和span元素具有class=“foo”的更惯用(我敢说可

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

//(div | span)[@class="foo"]
或者我只能取两个完整表达式的并集

//div[@class="foo"] | //span[@class="foo"]
这项工程:

(//golfer | //batter)[@ID="2" or @ID="3"]
…这让我大吃一惊。

获取所有
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)具有
    class=“foo”的所有
    div
    元素的并集
    和2)具有
    class=“foo”
    的所有
    span
    元素的集合


    很明显,这两个集合包含相同的内容。

    (//div |//span)[@class=“foo”]
    也包含相同的内容。谢谢为什么这令人惊讶?当然,请注意,
    (//golfer |//batter)[@ID=“2”或@ID=“3”]
    并不等同于
    //golfer[@ID=“2”].//batter[@ID=“3”]
    。我之所以提到这个问题,是因为你选择了一个与OP的原始问题不匹配的例子,这样在上下文中可能会与我的答案中显示的等价表达式相混淆。