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