2012-07-20 122 views
0

我正在使用XMLReader處理大型(1.2GB)XML文件。當它到達一個無效字符的節點時,腳本將停止運行,並顯示錯誤消息「Warning:XMLReader :: next():parser error:Input is not proper UTF-8,indicating encoding!」。XMLReader :: next()錯誤停止腳本

下面是複製錯誤的示例腳本:

$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文檔來自外部來源,我無法控制它並且無法更改它。

親切的問候。

回答

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(); 
+1

感謝@西仁,超聲處理。這允許我捕捉/隱藏錯誤,但它不允許我移動到下一個節點。所以腳本在遇到無效字符時仍會停止。我如何讓它忽略和繼續? – 2012-07-22 13:23:57