将XML数据加载到MySQL 5.0中

时间:2012-11-21 19:41:04

标签: php mysql xml xml-parsing

这里完全缺乏合适的解决方案让我发疯。

客户给了我一个14MB大小的XML文件,在将来的请求中可能会更大。我需要一个可以定期将其数据加载到MySQL表中的脚本。服务器正在运行MySQL 5.0.96,所以我不相信LOAD XML命令可供我使用。

我尝试使用PHP DOM lib来解析XML文件,但Apache返回500内部服务器错误。我认为这是一个内存不足,因为我可以注释掉加载XML文件的PHP代码,脚本运行顺畅(没有数据)。服务器上的内存限制已经是128MB。

我也尝试过XMLReader,它似乎做了同样的事情。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

XMLReader用作迭代器,因此您必须根据xml文档的单个标记实现分组/提取逻辑。假设xml文件中有一个像<row>这样的元素对应于单个插入,它可能看起来像这样:

$reader = new XMLReader();
$reader->open('/path/to/the/file.xml');
while ($reader->read()) {
    if ($reader->name == "row" && $reader->nodeType == XMLReader::ELEMENT) {
        // the cursor currently at <row> element

        // hopefully one fragment will fit into memory and you can use simplexml for easy access
        // alternatively try $reader->expand() for DOMNode of the same thing
        $rowxml = simplexml_load_string('<'.'?xml version='1.0'?'.'>'.$reader->readOuterXML());

        // build insert from the $rowxml object, run the query
    }
}
$reader->close();
相关问题