我正在使用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 />";
}
}
总结:如果我的条件仅为con1
,我会看到正确的结果。如果它只是con2
,我会看到正确的结果。当我使用or
时会出现问题。在这种情况下,我只会从con1
看到结果。就像它在完成第一个条件后停止了。它们与DOM树处于同一级别。
答案 0 :(得分:0)
您要做的是在同一个表达式中检索<div id="con1">
和<div id="con2">
,但您实际做的是检索 div 属性 id =“con1”或 id =“con2”。条件的第一个表达式返回true,然后获得<div id="con1">
节点。这很有道理。
要获得两个节点,您需要以下内容:
//div[@id="con1"]|//div[@id="con2"
注意://div[@id="con1"]
查找树中的任何节点<div id="con1">
,文档中的id
必须是唯一的。没有必要指定所有路径。