php - 在 php 中解析非常大的 XML 文件

标签 php mysql xml xml-parsing large-files

我需要解析 40GB 大小的 XML 文件,然后规范化并插入到 MySQL 数据库中。我不清楚需要在数据库中存储多少文件,我也不知道 XML 结构。

我应该使用哪个解析器,你会如何做?

最佳答案

在 PHP 中,您可以使用 XMLReaderDocs 读取超大的 XML 文件:

$reader = new XMLReader();
$reader->open($xmlfile);

超大的 XML 文件应该以压缩格式存储在磁盘上。至少这是有道理的,因为 XML 文件具有很高的压缩率。例如压缩成 large.xml.gz

PHP 通过 compression wrappersDocs 使用 XMLReader 很好地支持了这一点:

$xmlfile = 'compress.zlib://path/to/large.xml.gz';

$reader = new XMLReader();
$reader->open($xmlfile);

XMLReader 允许您“仅”对当前元素进行操作。这意味着它是只向前的。如果您需要保持解析器状态,则需要自己构建它。

我经常发现将基本 Action 包装到一组迭代器中很有帮助,这些迭代器知道如何在 XMLReader 上进行操作,例如仅迭代元素或子元素。您会在 Parse XML with PHP and XMLReader 中找到此概述。

另见:

关于php - 在 php 中解析非常大的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363901/

相关文章:

javascript - 根据脚本的响应更新 div

java - 为什么 java 中的 'Repeatable read' 隔离级别将我从 'Phantom reads' 中拯救出来?

mysql - 在MySQL中使用 "SELECT"命令按特定单词排序?

Java XML 动态解析器

PHP 数组搜索

php - 选择数据库行并将它们视为对象

php - 我应该使用 Elastic Search 而不是 MySQL 作为我的数据存储吗?

mysql - Oracle user_indexes 转换为 MySQL

php - XML查看器和荧光笔

java - Android:无法在布局中使用动画 GIF。 (跟随指南)