2013-10-06 138 views
0

我是Xpath新手。我用我的XPath Firefox插件測試了一個查詢,它返回了一個完美的結果。但是,當我在PHP中運行查詢並執行var_dump()時,我得不到任何結果。只是輸出類似於:DOMXPath查詢返回零結果

class DOMNodeList#4 (0) { 
} 

PHP接受我的表達式爲有效。到目前爲止,我已經刪除了我的瀏覽器生成的查詢的一部分。另外,我甚至試圖查詢(「*」)沒有任何結果。我還能嘗試什麼?我的查詢低於

$page = curl_exec($ch); 

# Close the PHP/CURL session 
curl_close($ch); 

// Create new PHP DOM document 
$dom = new DOMDocument; 
// Load html from curl request into document model 
@$dom->loadHTML($page); 
$xpath = new DOMXPath($dom); 

//$tableRows = $xpath->query("//id('divResults')/x:table/x:tbody/x:tr"); 
//$tableRows = $xpath->query("id('divResults')/table/tbody/tr"); 
//$tableRows = $xpath->query('/*'); 
$tableRows = $xpath->query('*'); 

var_dump($tableRows); 
+1

如果您使用的是名稱空間,則必須先註冊它們。只有當您的原始文檔包含名稱空間時才這樣做。 '$ xpath-> query'的結果確實會返回一個實現迭代器接口的元素,但是本身不包含數據,因此您不能使用'ver_dump'。 –

回答

0

由於某種原因,var_dump()不起作用。以下是一些可以完成工作的代碼。

$dom = new DOMDocument; 
if (!$dom->loadHTML($page)) throw new Exception (implode (",", libxml_get_errors())); 
$xpath = new DOMXPath($dom); 
$entries = $xpath->query($xpathExpr); 
if (!$entries) throw new Exception ("XPath evaluation error"); 
foreach ($entries as $entry) 
    echo "name: {$entry->nodeName}<br/>path: ".$entry->getNodePath()."<br/>value: {$entry->nodeValue}";