2012-08-02 255 views
0

我嘗試編寫一個簡單的PHP來抓取html頁面。 我不知道爲什麼我不能得到結果? 下面是我的一些PHP代碼:初學者頭疼PHP DOMXPath

//$html , successfuly get the html from "http://m.hkgolden.com/topics.aspx?type=HW" by curl 

$dom = new DOMDocument(); 
@$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
$xpath->registerNamespace('x', 'http://www.w3.org/1999/xhtml'); 

$itemList = $xpath->query('//x:div[contains(@class,"TopicBox_Details")]/a'); 

var_dump($itemList); // it show --> object(DOMNodeList)#4 (0) { } 

foreach ($itemList as $item){ 
     $this->child_urls[] = $item->getElementsByTagName('a')->item(0)->getAttribute('href'); 
       } 

var_dump($this->child_urls); //it show --> array(0) { } 

相同XPath查詢是在Firefox的XPath的檢查工作,但相同的查詢不能在PHP工作。我做錯了什麼? Firefox XPath Checker

+0

什麼是'$這個 - > child_xpath'價值? – xdazz 2012-08-02 10:08:25

+0

'// x:div [contains(@class,「TopicBox_Deta ils」)]/a'無論如何,我已經在問題中替換了它。 – 2012-08-02 10:18:16

+0

命名空間。命名空間。命名空間。 :)但我時間不多,所以我只能離開筆記。 – hakre 2012-08-02 10:20:10

回答

0

您應該將命名空間添加到在XPath以及在a元素 - 命名空間得到繼承:

//x:div[contains(@class,"TopicBox_Details")]/x:a 
+0

謝謝,它似乎你的答案可以幫助,但我現在不能嘗試,回到家裏到達我的電腦1小時後,我很初學,做出這樣簡單的錯誤。不知道名稱空間前綴。 – 2012-08-02 11:06:51

+0

我仍然得到這個結果...我怎麼調試它?對象(DOMNodeList)#4(0){} 數組(0){} @ $ dom-> loadHTML($ html); 如果我刪除@,在loadHTML時查看日誌。它顯示很多 [Thu Aug 02 19:50:03 2012] [錯誤] [客戶端XXX.XXX.XXX.XXX] PHP警告:DOMDocument :: loadHTML():意外的結束標記:實體中的腳本行: 911 in /home/jasper/www/lab/test2.php在線52 它是否相關? – 2012-08-02 11:51:18