在 PHP 中处理大型 XML 的最佳方式

2022-08-30 16:02:21

我必须在php中解析大型XML文件,其中一个是6.5 MB,它们可能更大。正如我所读到的,SimpleXML扩展将整个文件加载到一个对象中,这可能不是很有效。根据你的经验,最好的方法是什么?


答案 1

对于大文件,您需要使用 SAX 解析器而不是 DOM 解析器。

使用DOM解析器,它将读取整个文件并将其加载到内存中的对象树中。使用 SAX 解析器,它将按顺序读取文件,并调用用户定义的回调函数来处理数据(开始标记、结束标记、CDATA 等)。

使用SAX解析器,您需要自己维护状态(例如,您当前所在的标签),这使得它变得更加复杂,但对于一个大文件,它将在内存方面更有效率。


答案 2

我对此的看法:

https://github.com/prewk/XmlStreamer

一个简单的类,它将在流式传输文件时将所有子级提取到 XML 根元素。在 pubmed.com 的 108 MB XML 文件上测试。

class SimpleXmlStreamer extends XmlStreamer {
    public function processNode($xmlString, $elementName, $nodeIndex) {
        $xml = simplexml_load_string($xmlString);

        // Do something with your SimpleXML object

        return true;
    }
}

$streamer = new SimpleXmlStreamer("myLargeXmlFile.xml");
$streamer->parse();

推荐