如果给出

时间:2016-06-01 14:13:22

标签: php simplexml

我每天通过一些xml文件获取一些产品。

有时有4个文件,有时最多有10个。

我想在一个循环中使用来自URL的SimpleXMLElement来处理它们。

以下是我的尝试:

for ($i = 1; $i <= 10; $i++) {
    try {
        $SimpleXML = new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);
    } catch (Exception $e) {
        var_dump($e);
    }
}

但不幸的是我发出了警告:

  

SimpleXMLElement :: __ construct():http://example.com/file_6.xml:42:   解析器错误:输入不正确UTF-8,表示编码!字节:   0xE1 0x6D 0x6F 0x67

在这种情况下,只有5个文件,所以当我试图获得第6个时,那就是从网站上获取主页面。我也试图压制警告但没有成功。

 $SimpleXML = @new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);

有没有办法处理这些错误以避免它们停止我的脚本?

修改

我无法使用file_get_contents,因为在这种情况下,我遇到了内存限制错误,我无法增加内存。这些是如此大的文件,其中一个是1GB。猜猜是什么,这些文件的开发者将产品图像二进制文件放入文件中:((((((((我不能和他说话)。

EDIT2

在php文档中(here)我读过$var = @new some_class();应该有用。

如果我正在使用:

$SimpleXML = @new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);

我明白了:

  

异常:在第19行的........ \ Parser.php中无法将字符串解析为XML

我想,是的,它会好得多,因为这是Expection。如果我用try/catch换行,我就会得到同样的错误。

try {
    $SimpleXML = @new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);
} catch (Exception $e) {
    die('Exception');
}

\MFF_System\SimpleXMLExtended只是扩展了SimpleXMLElement类,并使用方法添加CDATA,没什么特别的。

0 个答案:

没有答案