2011-06-04 88 views
1

我想從this page中提取只有一個具有id=MainText的div元素。然而,當我這個頁面的內容加載到DOM對象,我得到幾個錯誤:使用DomDocument獲取元素在破損的HTML頁面上使用DomDocument

 
Tag g:plusone invalid... 
Unexpected end tag... 
htmlParseEntityRef: no name ... 
htmlParseEntityRef: expecting ';' ... 

所以,我在想,如果有可能從文檔忽略所有其他的東西而直接進入到第一部分只需要獲取具有該特定ID的div元素即可。

或者,有沒有其他的使用domdocument類來實現相同的目的?我不擅長寫正則表達式。

+0

*「當我加載此頁面的內容時」* - 您是如何做到這一點的? – Tomalak 2011-06-04 16:25:05

+0

@Tomalak:我還沒有決定如何去做。僅出於測試目的,我下載了該頁面並將其放在本地文件夾中,然後使用了loadHTMLFile方法 – fabio 2011-06-05 16:01:23

回答

0

切勿在HTML中使用RegEx。

堅持使用DOMDocument,如果不會導致進一步的問題,可能會抑制錯誤。

+0

在調用「loadHTML」方法之前,我已經抑制了錯誤並放置了一個「@」。這裏發生的情況是,某些內容會像「div id = MainTxt」元素一樣丟失 - 這是我需要提取的確切內容。 – fabio 2011-06-05 16:07:06

2

w3c驗證程序在快速運行時會吐出很多錯誤。嘗試使用這種方法清理html,然後將其提供給DomDocument:

#Assuming that $html is your html source (retrieve it as you prefer) 
$tidy = new tidy; 
$tidy->parseString($html, $config, 'utf8'); 
$tidy->cleanRepair(); 

$document = new DOMDocument(); 
$document->loadHTML((string)$tidy); 
+0

我在哪裏可以找到這個「整潔」課程?我在這裏測試了代碼,並且php使用這個類不存在。 – fabio 2011-06-05 16:04:01

+0

@fabio:http://www.php.net/manual/en/tidy.installation.php(谷歌,第一次打擊,認真。) – Tomalak 2011-06-05 16:14:14