PHP – SimpleXML解析错误
在底部查看编辑以显示更准确的错误输出
我使用SimpleXML首次使用PHP解析一些大的(~15MB)XML文件.这些文件是航班搜索结果,所以它们有很长的属性(链接回Kayak;例如: 解析时,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&_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 & $xml = preg_replace('#&(?=[a-z_0-9]+=)#','&',$xml); $sxe = simplexml_load_string($xml); 当然,这只是一个黑客攻击,修复你的情况的唯一好方法是让你的XML提供者修复他们的生成器.因为如果它生成了破碎的XML,谁知道其他错误会被忽视? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |