从while循环捕获XML读取错误的最佳方法

时间:2015-08-20 12:05:08

标签: php xml error-handling

我目前正在使用以下验证功能阅读它之前验证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但是有关解决方案是否在评论中有效的报道似乎存在冲突。无论如何,他们都是变通办法。

0 个答案:

没有答案