PHP DOM文档错误处理

2022-08-30 18:53:51

在我的应用程序中,我从url加载xml以解析它。但有时此 URL 可能无效。在这种情况下,我需要处理错误。我有以下代码:

$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 的错误处理函数进行处理。

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

谢谢。


答案 1

从我从文档中收集到的信息来看,处理此方法发出的警告很棘手,因为它们不是由 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);
}

然后抓住它。


答案 2
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();

这在 PHP 5.3 中适用于我。但是,如果您不使用 ,则可能需要进行一些修改。loadXML


推荐