2

我有这个代码:

$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 文件有错误),所以有办法删除这个警告吗?(没有出现)。

在此先感谢您的帮助。

4

1 回答 1

13

DOMDocument 非常擅长处理不完美的标记,但它会在所有地方抛出警告。

这在这里没有很好的记录。对此的解决方案是实现一个单独的设备来处理这些错误。

在调用 loadHTML 之前设置 libxml_use_internal_errors(true)。这将防止错误冒泡到您的默认错误处理程序。然后,您可以使用其他 libxml 错误函数来处理它们(如果您愿意)。

你可以在这里找到更多信息 http://www.php.net/manual/en/ref.libxml.php

处理 DOMDocument 错误的正确方法是:

<?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();
}

?>
于 2013-02-09T01:10:42.723 回答