【发布时间】:2013-09-02 08:07:58
【问题描述】:
我正在尝试并需要一些帮助来执行以下操作:
我想用 PHP 流式解析一个大的 XML 文件(4 GB)。我不能使用简单的 XML 或 DOM,因为它们会将整个文件加载到内存中,所以我需要可以流式传输文件的东西。
我如何在 PHP 中做到这一点?
我想要做的是浏览一系列<doc> 元素。并将他们的一些孩子写入一个新的 xml 文件。
我尝试解析的 XML 文件如下所示:
<feed>
<doc>
<title>Title of first doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
<links>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
</link>
</doc>
<doc>
<title>Title of second doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
<links>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
</link>
</doc>
</feed>
我正在尝试将每个 <doc> 元素的所有子元素获取/复制到一个新的 XML 文件中,<links> 元素及其子元素除外。
所以我希望新的 XML 文件看起来像:
<doc>
<title>Title of first doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
</doc>
<doc>
<title>Title of second doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
</doc>
非常感谢流式传输/流式解析/流式读取原始 XML 文件,然后将其部分内容写入 PHP 中的新 XML 文件。
【问题讨论】:
-
查看 XMLReader 类:php.net/manual/en/intro.xmlreader.php 这是一个流解析器。我现在正在更深入地阅读您的问题,看看是否可以提供更具体的答案。
-
@DeeDee 我听说过 XMLReader,但不知道如何使用它。感谢您的帮助!
-
当然!正如官方文档中缺乏 cmets 所证明的那样,它并没有被过多地使用。我自己已经很长时间没有使用它了。你能告诉我我的代码是如何工作的吗?如果它不能立即起作用,我们可以合作并找出问题所在。
-
@DeeDee 是的,当然。今晚晚些时候我会试一试,让你知道它是否有效或我得到任何错误。感谢您帮助我并愿意合作直到问题解决:-)
-
还有.. 为什么关闭了?我很确定这个问题是关于 php、xml、xml 解析、大文件的主题.. wtf
标签: php xml xml-parsing large-files large-data