【发布时间】:2012-08-08 17:00:08
【问题描述】:
我正在尝试弄清楚如何从 php(最新版本)中非常大的 xml 文件中删除一个元素(及其子项)。
我知道我可以使用 dom 和 simpleXml,但这需要将文档加载到内存中。
我正在查看 XML 编写器/读取器/解析器函数和谷歌搜索,但似乎没有关于该主题的内容(所有答案都建议使用 dom 或 simpleXml)。这不可能是正确的——我错过了什么吗?
我找到的最接近的东西是这个(C#):
您可以使用 XmlReader 顺序读取您的 xml(ReadOuterXml 在您的情况下一次读取整个节点可能很有用)。然后使用 XmlWriter 写出您要保留的所有节点。 (Deleting nodes from large XML files)
真的吗?那是方法吗?我必须复制整个大文件吗?
真的没有别的办法了吗?
一个方法
按照建议,
我可以使用 phps XML 阅读器或解析器读取数据,可能会对其进行缓冲,然后将其写入/转储+追加到新文件中。
但是这种方法真的实用吗?
我有将大型 xml 文件拆分成小块的经验,基本上是使用建议的方法,但这个过程需要很长时间才能完成。
我的数据集目前还不够大,无法让我知道如何解决这个问题。我只能假设结果将是相同的(一个非常缓慢的过程)。
有人有在实践中应用这个的经验吗?
【问题讨论】:
-
XML 文件的大小是否比您的 RAM 大?
-
假设是的。我试图找出一种方法来处理大型 xml 结构,并且假设如果当前大小不大于内存,它最终会。