2013-02-09 157 views
2

我有這樣的代碼:刪除DOM警告PHP

$strhtml = file_get_contents('05001400300320100033100.html'); 
$dochtml = new DOMDocument(); 
$dochtml->loadHTML($strhtml); 
$elm = $dochtml->getElementById('upPanelActuciones'); 
print $dochtml->saveXml($elm); 

即時得到這樣的警告:

 Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: error parsing attribute name in Entity, line: 674 in C:\AppServ\www\video01\sector2\dom3.php on line 10 

     Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Opening and ending tag mismatch: div and td in Entity, line: 1019 in C:\AppServ\www\video01\sector2\dom3.php on line 10 

     Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Opening and ending tag mismatch: div and td in Entity, line: 1020 in C:\AppServ\www\video01\sector2\dom3.php on line 10 

     Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Opening and ending tag mismatch: div and td in Entity, line: 1022 in C:\AppServ\www\video01\sector2\dom3.php on line 10 

我不能處理HTML(我知道的HTML文件有錯誤),所以有是刪除此警告的一種方法? (沒有出現)。

在此先感謝您的幫助。

回答

10

DOMDocument非常擅長處理不完善的標記,但它在處理時會拋出警告。

這裏沒有很好的記錄。解決方案是實施 一個單獨的設備來處理這些錯誤。

在調用loadHTML之前設置libxml_use_internal_errors(true)。這 將防止錯誤冒泡到您的默認錯誤處理程序。 然後您可以使用其他libxml錯誤 函數獲得它們(如果您願意)。

您可以在這裏找到 http://www.php.net/manual/en/ref.libxml.php

更多信息處理DOM文檔錯誤的正確方法是這樣的:

<?php 

// enable user error handling 
var_dump(libxml_use_internal_errors(true)); 

// load the document 
$doc = new DOMDocument; 

if (!$doc->load('file.xml')) { 
    foreach (libxml_get_errors() as $error) { 
     // handle errors here 
    } 

    libxml_clear_errors(); 
} 

?>