我正在编写解析器,并尝试对异常进行良好的错误处理。
以下示例代码:
<?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()
),然后抛出异常。我觉得唯一的解决方案是使用静音(@
)运算符,但这似乎是个坏主意。
请注意,当我不传递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 中无论如何都会引发错误。