Pet*_*uza 27 php xml parsing simplexml large-files
我必须解析php中的大型XML文件,其中一个是6.5 MB,它们甚至可能更大.正如我所读到的SimpleXML扩展,将整个文件加载到一个对象中,这可能效率不高.根据您的经验,最好的方法是什么?
osk*_*rth 11
我接受它:
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();
Run Code Online (Sandbox Code Playgroud)
使用DOMDocument带有大型XML文件时,请不要忘记LIBXML_PARSEHUGE在load()方法的选项中传递标志.(同样适用于对象的其他load方法DOMDocument)
$checkDom = new \DOMDocument('1.0', 'UTF-8');
$checkDom->load($filePath, LIBXML_PARSEHUGE);
Run Code Online (Sandbox Code Playgroud)
(适用于120mo XML文件)
小智 6
正如Eric Petroelje建议的那样,SAX Parser对于大型XML文件会更好.DOM解析器加载整个XML文件并允许您运行xpath查询 - SAX(XML的简单API)解析器将一次只读取一行并为您提供钩点以进行处理.