XMLReader :: next()错误会停止脚本

时间:2012-07-20 10:40:45

标签: php xml-parsing

我正在使用XMLReader处理大型(1.2GB)XML文件。当它到达具有无效字符的节点时,脚本停止运行,并显示错误消息“警告:XMLReader :: next():解析器错误:输入不正确UTF-8,表示编码!”。

这是一个复制错误的示例脚本:

$reader = new XMLReader();        
$reader->open('sample.xml',null, LIBXML_NOERROR | LIBXML_NOWARNING);
while ($reader->read() && $reader->name !== 'item');
while ($reader->name === 'item') {
    $reader->next('item');
}
$reader->close();

sample.xml中:

<?xml version="1.0" ?>
<source>
<item>
    <data><![CDATA[good node]]></data>
</item>
<item>
    <data><![CDATA[Suspendisse euismod, ultrices, ligula leo lacinia magna, eleifend fermentum lacus est ut velit! Vestibulum nec magna in tellus mollis fermentum. Mauris vehicula felis eget eros auctor consectetur. Pellentesque imperdiet arcu ac mauris tempor id feugiat mauris commodo. Sed facilisis turpis eu mi ornare tempor. Ut velit erat, volutpat ut sollicitudin et, mattis sed turpis. bad nodé]]></data>
</item>
<item>
    <data><![CDATA[another good node]]></data>
</item>
</source>

无论如何要么忽略节点并转移到下一个节点,要么清理数据来处理它?<​​/ p>

XML文档来自外部源,我无法控制它,也无法更改它。

亲切的问候。

1 个答案:

答案 0 :(得分:0)

尝试

$reader->open('sample.xml',UTF8, LIBXML_NOERROR | LIBXML_NOWARNING);

这可能会对你有所帮助

  // enable user error handling
  libxml_use_internal_errors(true);
  /* ... do your XML processing ... */
  $errors = libxml_get_errors();
 foreach ($errors as $error) {
    // handle errors here
 }
 libxml_clear_errors();