【发布时间】:2013-05-28 17:16:29
【问题描述】:
我正在尝试解析 stackoverflow 转储文件 (Posts.xml- 17gb)。格式为:
<posts>
<row Id="15228715" PostTypeId="1" />
.
<row Id="15228716" PostTypeId="2" ParentId="1600647" LastActivityDate="2013-03-05T16:13:24.897"/>
</posts>
我必须将每个问题与他们的答案“分组”。基本上找到一个问题(posttypeid=1)使用另一行的 parentId 找到它的答案并将其存储在 db 中。
我尝试使用 querypath (DOM) 执行此操作,但它一直在 exiting(139) 。我的猜测是因为文件很大,我的电脑无法处理它,即使交换空间很大。
我考虑过 xmlreader,但是当我使用 xmlreader 看到它时,程序会多次读取文件(查找问题、寻找答案、重复很多次),因此不可行。我错了吗?
还有其他方法/方式吗?
救命!
这是一次解析。
【问题讨论】:
-
改用
SimpleXMLIterator.... -
@Baba 不是。见lxr.php.net/xref/PHP_TRUNK/ext/simplexml/simplexml.c#2249。它会将整个文件加载到内存中,然后对其进行迭代。
-
XMLReader 将遍历每个节点而不将整个文件加载到内存中,但除非您另有说明,否则它只会这样做一次。
-
不得不将 16 GB 中的 15 个放入交换空间然后从中读取,这很有趣。这需要几个小时。
-
我会考虑手动阅读文件,从一个标签到下一个标签。我在这里没有看到任何其他方式不必交换?
标签: php xml xml-parsing