2011-06-10 41 views
0

我們在運行服務器時使用XMLReader時遇到問題,而在我們的開發服務器上一切運行正常。在閱讀XML文件時,XMLReader總是拋出一個「解析器錯誤:文檔末尾的額外內容」。無論它包含數千個元素還是隻包含一行。XMLReader在幾乎空的xml文件上報告「文檔末尾的額外內容」

$reader = new \XMLReader(); 
$reader->open($xmlFileName, 'UTF-8'); 
while ($reader->read()) { ... do nothing ... } 
$reader->close(); 

的XML看起來像這樣以最簡單的形式:

<?xml version="1.0" encoding="UTF-8"?> 
<data><articles><![CDATA[test]]></articles></data> 

每個XML驗證說,這是良好的形成,但誤差仍然拋出。

我可以在我們的發展,我們的生活系統之間發現的唯一區別是,我們的開發系統(Ubuntu的)有libxml2的版本2.7.16,而直播系統(CentOS的)有2.6.16。這可能是原因嗎?

+2

什麼的XML文件顯示十六進制轉儲(即有沒有在最後不可見的內容)? – Richard 2011-06-10 09:27:40

+0

生產服務器庫和PHP環境是使用RPM安裝還是上傳並構建?換句話說,你是用手還是用RPM創建'php-xml'? – benosteen 2011-06-10 09:30:04

+2

難道你的* real * XML有多個根元素? – Tomalak 2011-06-10 09:30:52

回答

0

不同的版本可能永遠都是一個問題,雖然它可能不會回答問題所在,只是您可能需要的解決方案。我很懷疑你的CDATA處理方式(嘗試在內容周圍使用空格),似乎還記得在你的相當老的版本中CDATA處理方面的一些舊錯誤,以及如果你真的得到了UTF-8的話(一些庫是字符和默認設置敏感,如忽略手動超馳如果右設置被設置另外,是「 - 」?在「UTF-8」的破折號,正常破折號或一些其他短劃線)

另外,儘量發表您的真正的XML,甚至在十六進制轉儲,但我似乎記得爲UTF-8作爲別的東西會造成額外的字符(這是不是真的有)處理,這些字符編碼。

相關問題