【发布时间】:2018-01-06 22:35:54
【问题描述】:
我正在尝试查询一些非常大的 XML 文件(最多几个 gig),检查它们的格式是否正确,然后将它们写入硬盘。看起来很简单,但由于它们太大了,我无法在内存中保存整个文档。因此我的问题是: 当可用 RAM 小于一个文档的大小时,如何读取、检查和写入大型 XML 文件?
我的方法: 使用 XMLReader 逐个节点读取它(如果成功,则文档必须格式正确)并使用 XMLWriter 进行写入。问题:XMLWriter 似乎将所有内容都存储在 RAM 中,直到文档完成。 DOM 文档和 SimpleXML 似乎也是如此。还有什么我可以尝试的吗?
【问题讨论】:
-
为什么不使用XSD 来验证 XML?
-
@halloei 能够验证文档绝对有用(而不仅仅是检查格式是否正确),但不幸的是,由于其结构经常变化,这是不可能的。
-
如果您使用
XMLWriter::openURI(),则不会发生这种情况。它有一个内部缓冲区,因此它不会写入每个方法调用,但您可以使用XMLWriter::flush()触发它
标签: php xml xmlreader xmlwriter