PHP – SimpleXML解析错误

前端之家收集整理的这篇文章主要介绍了PHP – SimpleXML解析错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
底部查看编辑以显示更准确的错误输出

我使用SimpleXML首次使用PHP解析一些大的(~15MB)XML文件.这些文件是航班搜索结果,所以它们有很长的属性(链接回Kayak;例如:
“/book/flightcode=1238917408.NxJI6G.0.F.ORBITZAIR,ORBITZAIR.0.f36f1ea92513977249aa695112410052\u0026amp;sid=26-Vu01v7ilzhSAjPVLZ3Ul”

解析时,SimpleXML会抛出此错误

“实体:第10行:解析器错误:EntityRef:期待’;’在“然后;

“38917408.NxJI6G.0.F.ORBITZAIR,ORBITZAIR.0.f36f1ea92513977249aa695112410052& sid in”
然后;

“simplexml_load_string()[function.simplexml-load-string]:^ in,”

等等这些网址的每一行都是如此.

我发现SimpleXML并不喜欢PHP.net上的长属性而没有解决方案.我宁愿现在只使用和学习SimpleXML,如果有一个非常简洁,有点简单的解决方法,可以解决这个错误.

有没有人有办法解决吗?提前致谢!

我尝试输入XML的前13行,但它只输出没有XML的信息….所以如果它有帮助我可以这样做.我不确定使用另一个解析器/扩展是否会降低功能或易用性,但如果没有解决方法,请随意建议另一个(DOM或XMLReader是我正在考虑的).

以下编辑包括较少的误操作输出

http://dl.dropbox.com/u/10206237/stack_overflow_xml.xml

错误1:

simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 10: parser error : EntityRef: expecting ';' in

错误2 :(我认为XML很好,因为它适用于使用DOM的Python脚本;我正在将它转换为PHP,因为我不知道Python).我不知道浏览器中的输出会有所不同.谢谢你耐心等待.)

<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: 38917408.Pt8rW8.0.F.ORBITZAIR,ORBITZAIR.0.f36f1ea92513977249aa695112410052&amp;_sid_ in

错误3:

function.simplexml-load-string</a>]:                                                                                ^ in

(所有这些空间都在那里)

正如其他答案和评论中所提到的,您的源XML已被破坏,XML解析器应该拒绝无效输入. libxml有一个“恢复”模式,可以让你加载这个破碎的XML,但你会丢失“& sid”部分,所以它无济于事.

如果你很幸运,并且你喜欢冒险,你可以尝试以某种方式通过修复输入来使其工作.您可以使用一些字符串替换来转义看起来像是在URL的查询部分中的&符号.

$xml = file_get_contents('broken.xml');
// replace '&' followed by a bunch of letters,numbers
// and underscores and an equal sign with &amp;
$xml = preg_replace('#&(?=[a-z_0-9]+=)#','&amp;',$xml);
$sxe = simplexml_load_string($xml);

当然,这只是一个黑客攻击,修复你的情况的唯一好方法是让你的XML提供者修复他们的生成器.因为如果它生成了破碎的XML,谁知道其他错误会被忽视?

猜你在找的PHP相关文章