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 は不完全なマークアップの処理に非常に優れていますが、そうするとあちこちで警告がスローされます。

これはここでは十分に文書化されていません。これに対する解決策は、これらのエラーだけを処理するための別の aparatus を実装することです。

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 に答える