在PHP中不使用太多内存的情况下读/写大型XML

我试图查询一些非常大的XML文件(最多几个演出),检查它们是否格式良好,然后将它们写入硬盘。 看起来很简单,但由于它们太大,我无法在内存中获得整个文档。 因此,我的问题是: 如何在可用RAM少于一个文档时读取,检查和写入大型XML文件?

我的方法:使用XMLReader逐个节点读取它(如果成功,文档必须格式良好)并使用XMLWriter进行编写。 问题:XMLWriter似乎将所有内容都存储在RAM中,直到文档完成。 DOM文档和SimpleXML似乎也是如此。 还有什么我可以尝试吗?


你的方法似乎是合适的,为了解决XMLWriter的RAM问题,你可以尝试定期将内存刷新到你的输出文件中。

<?php
$xmlWriter = new XMLWriter();
$xmlWriter->openMemory();
$xmlWriter->startDocument('1.0', 'UTF-8');
for ($i=0; $i<=10000000; ++$i) {
    $xmlWriter->startElement('message');
    $xmlWriter->writeElement('content', 'Example content');
    $xmlWriter->endElement();
    // Flush XML in memory to file every 1000 iterations
    if (0 == $i%1000) {
        file_put_contents('example.xml', $xmlWriter->flush(true), FILE_APPEND);
    }
}
// Final flush to make sure we haven't missed anything
file_put_contents('example.xml', $xmlWriter->flush(true), FILE_APPEND);`

资料来源:http://codeinthehole.com/tips/creating-large-xml-files-with-php/

链接地址: http://www.djcxy.com/p/64753.html

上一篇: Read/Write large XMLs without using too much memory in PHP

下一篇: Nexpose XML report Version 2.0, How to remove HTML from XML?