PHP DOMDocument错误处理

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (106)

在我的应用程序中,为了解析XML,我从url加载XML。但有时这个网址可能无效。在这种情况下,我需要处理错误。我有以下代码:

$xdoc = new DOMDocument();
try{
  $xdoc->load($url); // This line causes Warning: DOMDocument::load(...)
                     // [domdocument.load]: failed to open stream: 
                     // HTTP request failed! HTTP/1.1 404 Not Found in ...
} catch (Exception $e) {
  $xdoc = null;
}

if($xdoc == null){
  // Handle
} else {
  // Proceed
}

我知道我可能做错了,但是有什么正确的方法来处理这种例外呢?我不想在我的页面上看到错误信息。

DOMDocument手册::load()说:

如果作为文件名传递空字符串或命名空文件,则将生成警告。此警告不是由libxml生成的,不能使用libxml的错误处理函数来处理。

但是没有关于如何处理的信息。

谢谢

提问于
用户回答回答于
set_error_handler(function($number, $error){
    if (preg_match('/^DOMDocument::loadXML\(\): (.+)$/', $error, $m) === 1) {
        throw new Exception($m[1]);
    }
});

$xml = new DOMDocument();
$xml->loadXML($xmlData);

restore_error_handler();

如果你不使用loadXML,你可能需要做一些修改。

用户回答回答于

从我可以从文档中收集的信息来看,由这个方法发出的处理警告是非常棘手的,因为它们不是由libxml扩展生成的,因此不能被处理libxml_get_last_error()。你可以使用错误抑制运算符并检查返回值false...

if (@$xdoc->load($url) === false)
    // ...handle it

或注册一个错误处理程序抛出一个异常的错误

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

然后捕获它。

扫码关注云+社区

领取腾讯云代金券