从XML加载数据:如何跳过/不正确的XML文件中的错误?

时间:2013-01-25 18:02:42

标签: xml simplexml feed php

我在数据库中有几个我定期检查的XML提要。我如何处理数据:

我从DB加载这些XML链接并循环遍历simplexml_load_file()我正在解析数据。 但有时由于XML文件格式错误导致错误而终止脚本,例如:

Warning: simplexml_load_file() [function.simplexml-load-file]: URL_ADDRESS:1: parser error : Invalid XML encoding name in path_to_script on line 98

Warning: simplexml_load_file() [function.simplexml-load-file]: <?xml version="1.0" encoding=""?> in path_to_scriptp on line 98

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in path_to_script on line 98

Warning: Invalid argument supplied for foreach() in path_to_script on line 99

有没有办法处理这个错误,当发生错误时,会跳过这个XML提要,脚本会继续下一个吗?

2 个答案:

答案 0 :(得分:1)

使用libxml_use_internal_errors()来抑制所有XML错误,然后使用libxml_get_errors()对它们进行迭代。

Source

答案 1 :(得分:1)

如果simplexml_load_file­Docs无法加载文件,则会返回false。如果您使用LIBXML_NOERROR option­Docs,则不会报告错误。

所以你需要做的就是检查返回值:

foreach ($files as $file)
{
    $xml = simplexml_load_file($file, null, LIBXML_NOERROR);

    if ($xml === false) {
        continue;
    }

    ... process $xml ...
}

在线演示:http://codepad.viper-7.com/EXG7VP