一尘不染

在php中解析极大的XML文件

mysql

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

我应该使用哪个解析器,您将如何进行呢?


阅读 239

收藏
2020-05-17

共1个答案

一尘不染

在PHP中,您可以使用XMLReader Docs 读取超大型XML文件:

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

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

PHP XMLReader通过压缩包装器
Docs
很好地支持了这一点:

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

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

XMLReader允许您将当前元素“唯一”上运行。这意味着它仅向前。如果需要保持解析器状态,则需要自己构建它。

我经常发现将基本动作包装到一组迭代器中很有帮助,这些迭代器知道如何XMLReader像仅通过元素或子元素进行迭代那样进行操作。您可以在使用PHP和XMLReader解析XML中找到概述。

另请参阅:

2020-05-17