我需要解析 40GB 大小的 XML 文件,然后规范化并插入到 MySQL 数据库中。我不清楚需要在数据库中存储多少文件,我也不知道 XML 结构。
我应该使用哪个解析器,你会如何做?
最佳答案
在 PHP 中,您可以使用 XMLReader
Docs 读取超大的 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/