3

我正在使用 XPath,这是我的查询:

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1"]/table/tr/td');

一切正常。

然后我在中更改条件,div查询是这样的:

$elements = $xpath->query('//div/div/div/div/div/div[@id="con2"]/table/tr/td');

我确实看到了我必须看到的。

但后来,如果我这样做:

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1" or @id="con2"]/table/tr/td');

我再次看到的只是con1. 这是为什么?

完整代码如下:

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1" or @id="con2"]/table/tr/td');
foreach ( $elements as $element ) {
    $str1=$element->getAttribute('class');
    $str2="first-td";
    $str3="status";
    if (strcmp($str1,$str2)==0) {
        var_dump( $element->nodeValue);
    }
    if (strcmp($str1,$str3)==0) {
        echo $element->childNodes->item(0)->getAttribute('class'). "<br />"; 
    }
}

总结一下:如果我的条件是 only con1,我会看到正确的结果。如果只是con2,我会看到正确的结果。当我使用or. 在这种情况下,我只看到来自con1. 就像它在满足第一个条件后停止。它们与 DOM 树处于同一级别。

4

1 回答 1

0

您正在尝试做的是在同一个表达式中检索<div id="con1">and <div id="con2">,但您实际上正在做的是检索具有属性id="con1"id="con2"的div。条件的第一个表达式返回真,然后你得到节点。这说得通。<div id="con1">

要获得两个节点,您需要以下内容:

//div[@id="con1"]|//div[@id="con2"

注意://div[@id="con1"]查找<div id="con1">树中的任何节点,并且id文档中的 必须是唯一的。没有必要指定所有向下的路径。

于 2012-12-21T08:27:27.943 回答