在 PHP 中处理大型 XML 的最佳方式
2022-08-30 16:02:21
我必须在php中解析大型XML文件,其中一个是6.5 MB,它们可能更大。正如我所读到的,SimpleXML扩展将整个文件加载到一个对象中,这可能不是很有效。根据你的经验,最好的方法是什么?
我必须在php中解析大型XML文件,其中一个是6.5 MB,它们可能更大。正如我所读到的,SimpleXML扩展将整个文件加载到一个对象中,这可能不是很有效。根据你的经验,最好的方法是什么?
对于大文件,您需要使用 SAX 解析器而不是 DOM 解析器。
使用DOM解析器,它将读取整个文件并将其加载到内存中的对象树中。使用 SAX 解析器,它将按顺序读取文件,并调用用户定义的回调函数来处理数据(开始标记、结束标记、CDATA 等)。
使用SAX解析器,您需要自己维护状态(例如,您当前所在的标签),这使得它变得更加复杂,但对于一个大文件,它将在内存方面更有效率。
我对此的看法:
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();