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 ドキュメントは外部ソースからのものであり、私はそれを制御できず、変更することもできません。
敬具。