2012-07-15 64 views
3

我使用XPath正確的元素,這是我的查詢: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樹的同一級別。

+2

無論如何,當你擁有通配符啓動器時,是否真的有必要擁有所有'div's? – freefaller 2012-07-15 17:37:54

+0

是的,如果你看到我是否只活一個條件,我會得到結果。如果我使用或我只獲得第一個。 – ghostrider 2012-07-15 17:43:56

+0

驗證選擇了多少個元素 - 如果它們的數目是兩個,那麼問題是由PHP代碼引起的,而不是由看起來正確的XPath表達式引起的。 – 2012-07-15 17:50:49

回答

0

你所要做的是在同一個表達式來檢索<div id="con1"><div id="con2">,但你實際上做的是檢索DIV這要麼有一個屬性ID =「con 1的」ID = 「con2」。條件的第一個表達式返回true,然後獲得<div id="con1">節點。這說得通。

爲了讓兩個節點,你需要這樣的東西:

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

注://div[@id="con1"]找到的任何節點<div id="con1">在樹和文檔中的id必須是唯一的。沒有必要指定所有的路徑。