0

我正在使用 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();

示例.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>

无论如何要忽略该节点并移至下一个节点,还是清理数据以处理它?

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

亲切的问候。

4

1 回答 1

0

try with

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

this may help you

  // 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();
于 2012-07-20T12:16:00.473 回答