如何使用php处理比较大的xml文件?
说下具体问题:
需要从别的网站抓取xml文件,比如用curl抓取然后处理。
目前碰到的问题是,抓取并处理时,由于xml文件比较大,因此会造成
处理时间长、cpu占用高、内存占用多
的问题。
该如何解决这3个问题呢?之前考虑分片处理xml,但是没有什么好的方案。
补充一下:需要考虑内存占用、CPU占用。由于服务器比较烂,目前我处理500k以上的xml,使用SimpleXML来做已经有点支撑不住了,所以才会考虑能不能对xml文件进行分段读取拆分解析。
附上一个xml文件供测试:
流放與王國
12 years, 2 months ago
Answers
PHP中有两种主要的XML解析器
1)基于树的解析器。它是把整个文档存储为树的数据结构中,即需要把整个文档都加载到内存中才能工作。所以,当处理大型XML文档时候,性能剧减。SimpleXML和DOM扩展属于此类型解析器。
2)基于流的解析器。它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互(当移向下一个节点时,上一个节点是被丢弃,但也设置为保留)。很明显,其效率要高且占内存少,不便之处代码量大点。
所以,PHP中处理大型XML文档可以用XMLReader扩展方案(基于流的解析器)。它在PHP 5.1中默认是启用的。
以下是示例:
kos...
answered 12 years, 2 months ago