2011-06-10 127 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作为别的东西会造成额外的字符(这是不是真的有)处理,这些字符编码。

相关问题