我目前正在使用以下验证功能阅读它之前验证XML ...
public static function validate($xml) {
libxml_use_internal_errors(TRUE);
$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadXML($xml);
$errors = libxml_get_errors();
if (empty($errors)) { return TRUE; }
$error = $errors[0];
if ($error->level < 3) {
return TRUE;
} else {
return $errors;
}
}
一旦它被验证,我们就开始使用while循环读取XML,基本上就是这样......
$reader = new XMLReader();
$reader->xml($xml);
while($xml->read()) { ... }
我遇到的问题是由于某种原因,某些XML正在通过验证,但在read()
操作期间导致错误。在我们的例子中,while循环的主体是实质性的,所以如果可能的话将它包装在try / catch块中是不现实的(我不认为这些是例外,但如果我错了就纠正我。)
捕获while
循环的read()
方法产生的错误的最佳方法是什么?
到目前为止我能找到的唯一解决方案是从http://www.ibm.com/developerworks/library/x-pullparsingphp/使用track_errors
PHP INI设置,但这似乎有点过于捕获一个地方的错误,是不是其他方式?
编辑:read()
错误产生的错误级别为E_WARNING
,确切的错误消息为XMLReader::read(): An Error Occured while reading
。
编辑2:我发现了以下与之相关的问题:Getting PHP's XMLReader to not throw php errors in invalid documents但是有关解决方案是否在评论中有效的报道似乎存在冲突。无论如何,他们都是变通办法。