私はパーサーを書いている最中で、例外を使って適切なエラー処理をしようとしています。
次のサンプル コード:
<?php
$xml = <<<XML
<?xml version="1.0"?>
<rootElem>
XML;
$reader = new XMLReader();
$reader->xml($xml, null, LIBXML_NOERROR | LIBXML_NOWARNING);
$reader->read();
放出するもの:
PHP Warning: XMLReader::read(): An Error Occured while reading in /Users/evert/code/xml/errortest.php on line 11
PHP Stack trace:
PHP 1. {main}() /Users/evert/code/xml/errortest.php:0
PHP 2. XMLReader->read() /Users/evert/code/xml/errortest.php:11
以下の追加:
libxml_use_internal_errors(true);
効果はありません。
私の目標は、エラーを後で ( でlibxml_get_errors()
) チェックし、例外をスローすることです。唯一の解決策は Silence ( @
) 演算子を使用することだと思いますが、これは悪い考えのようです..
LIBXML
定数を渡さない場合や を使用しない場合libxml_use_internal_errors
、次のような別のエラーが発生することに注意してください。
PHP Warning: XMLReader::read(): /Users/evert/code/xml/:2: parser error : Extra content at the end of the document in /Users/evert/code/xml/errortest.php on line 11
これは、基礎となる libxml ライブラリーが実際にエラーを抑制していることを示唆していますが、XMLReader 内ではとにかくエラーがスローされます。