优化 XML 解析的首要策略之一是动态解析- 意思是,不要等到整个数据到达,而是在有要解析的内容时立即开始解析。
这更有效,因为瓶颈通常是网络连接而不是 CPU,所以如果我们可以在不等待所有网络信息的情况下找到答案,我们已经进行了相当多的优化。
你应该谷歌这个词XML push parser
或XML pull parser
在文章Pull parsing XML in PHP - Create memory-efficient stream processing中,您可以找到一个教程,其中显示了一些关于如何使用与 PHP5 捆绑的 XMLReader 库使用 PHP 执行此操作的代码
这是此页面的引述,它基本上用更好的文字说明了我刚刚所做的事情:
PHP 5 引入了 XMLReader,这是一个用于读取可扩展标记语言 (XML) 的新类。与 SimpleXML 或文档对象模型 (DOM) 不同,XMLReader 以流模式运行。也就是说,它从头到尾读取文档。您可以在看到最后的内容之前从头开始处理内容。这使得它非常快速、非常高效并且非常节省内存。您需要处理的文件越大,这一点就越重要。
流模式下的解析与过程式解析有点不同。请记住,并非所有数据都已存在。您通常需要做的是提供实现某种状态机的事件处理程序。如果您看到标签 A,请执行此操作,如果您看到标签 B,请执行此操作。
关于推送解析和拉取解析的区别看这篇文章。长话短说,两者都是基于流的解析器。您可能需要一个推送解析器,因为您想在数据从 XML 提要通过网络到达时进行解析。
PHP 中的推送解析也可以使用xml_parse()
(带有 libxml 兼容层的 libexpat)来完成。您可以查看代码示例xml_parse
PHP 手册页。