PHP XMLReader偶然发现无效字符并停止

时间:2012-02-15 01:49:48

标签: php xml parsing xmlreader

正如标题所说。

我正在处理大量下载的XML文件。其中一些文件包含无效字符,例如“US”或“VB”(垂直制表符)。不知道为什么那些角色开始。对我们来说,我真的无能为力。

$z = new XMLReader;
$z->open('compress.zlib://'.$file, "UTF-8");
while ($z->read() && $z->name !== 'p');
while ($z->name === 'p'){

try
{
    $node = new SimpleXMLElement($z->readOuterXML());
}catch(Exception $e)
{
    echo $e->getMessage();
}
// And so on
}

我收到错误消息“无法将字符串解析为XML”。

我可以在这做什么?

2 个答案:

答案 0 :(得分:2)

毕竟终于找到了解决方案。

我决定使用fopen构建&过程中的过程。这就是我最终的结果:

$handle = fopen('compress.zlib://'.$file, 'r');
$xml_source = '';
$record = false;
if($handle){
    while(($buffer = fgets($handle, 4096)) !== false){
        if(strpos($buffer, '<open_tag>') > -1){
            $xml_source = '<?xml version="1.0" encoding="UTF-8"?>';
            $record = true;
        }
        if(strpos($buffer, '</close_tag') > -1){
            $xml_source .= $buffer;
            $record = false;
            $xml = simplexml_load_string(stripInvalidXml($xml_source));

            // ... do stuff here with the xml element

        }
        if($record){
            $xml_source .= $buffer;
        }

    }
}

函数simplexml_load_string()是提供的quickshiftin。像魅力一样。

答案 1 :(得分:0)

在使用XMLReader解析之前,尝试通过something like this运行它。