5

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

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

4

2 回答 2

4

他们使用两种不同的软件架构——推式和拉式。

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

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

如果您不了解推送与拉取架构之间的细微差别,那么我建议您从 XMLReader 开始,因为“拉取”更易于理解且更易于可视化。

于 2013-02-12T00:44:53.207 回答
0

不是这方面的专家,但根据 PHP 文档,XMLReader 似乎是要走的路,因为介绍中说“阅读器充当文档流上的光标,并在途中的每个节点处停止。”。从理论上讲,这应该可以防止内存问题/泄漏,尤其是在较大的文件上。

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

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

于 2012-08-21T07:48:50.290 回答