我知道xmlreader和其他基于树的解析器(如simplexml和dom)之间的区别。但是xmlreader和xmlparser有什么区别?使用一个在另一个上有什么好处吗?
我需要解析相对较大的xml文件,联盟数据馈送大约100M。
答案 0 :(得分:4)
他们使用两种不同的软件架构 - 推送与拉动。
XMLReader是一个“拉解析器”。您负责创建一个大循环并调用read()函数来向前移动光标。这种软件架构趋于直观易懂。
XMLParser是一个基于事件的“推送解析器”。您负责注册由start_element,end_element,character_data,start_namespace_decl等事件触发的回调函数。当您调用xml_parse()时,Expat库将使用您的回调函数处理整个XML文档。
如果你不理解push与pull架构之间的细微差别,那么我建议你从XMLReader开始,因为“pull”更容易理解,更容易可视化。
答案 1 :(得分:0)
不是这方面的专家,但根据PHP文档,XMLReader似乎是要走的路,因为引言说“读者在文档流中作为光标前进,并在途中停在每个节点“。理论上,这应该可以防止内存问题/泄漏,特别是在较大的文件上。
http://www.php.net/manual/en/intro.xmlreader.php
XMLParser将返回一个数组,这可能会导致更大的xml文件出现内存问题。