Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php XMLReader::next()错误停止脚本_Php_Xml Parsing - Fatal编程技术网

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

Php XMLReader::next()错误停止脚本,php,xml-parsing,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->r

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

是否可以忽略该节点并移动到下一个节点,或者清理数据以进行处理

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

亲切问候。

试着

$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();

谢谢@hiren soni。这允许我捕获/隐藏错误,但不允许我移动到下一个节点。因此,脚本在遇到无效字符时仍会停止。我如何让它忽略并继续?