php xmlReader vs xmlparser


php xmlReader vs xmlparser

我知道xmlreader和其他基于树的解析器(如simplexml和dom)之间的区别。但是xmlreader和xmlparser之间有什么区别?使用一个比另一个有好处吗?

我需要解析相对较大的xml文件,大约100M的附属数据流。

它们使用两种不同的软件架构-推和拉。

XMLReader是一个"拉式解析器"。您负责创建一个大循环,并调用read()函数来向前移动光标。这种软件体系结构往往更容易直观地理解。

XMLParser是一个基于事件的"推送解析器"。您负责注册由诸如start_element、end_element,character_data,start_namespace_decl等事件触发的回调函数。当您调用xml_parse()时,Expat库将使用回调函数处理整个xml文档。

如果您不理解push和pull体系结构之间的微妙之处,那么我建议您从XMLReader开始,因为"pull"更易于理解和可视化。

不是这方面的专家,但根据PHP文档,XMLReader似乎是最好的选择,正如引言所说的"阅读器充当文档流上前进的光标,并在途中的每个节点停止。"。理论上,这应该可以防止内存问题/泄漏,尤其是在较大的文件上。

http://www.php.net/manual/en/intro.xmlreader.php

XMLParser将返回一个数组,这可能会导致较大xml文件的内存问题。