我必须为我的商店(产品,价格,类别)解析3个远程XML文件,其中最大的文件大约为500MB +。我必须解析它们并将其插入到mysql数据库中。XMLReader错误
我可以从2种格式
- 所有3 XML文件名为.tar.gz一个压缩归档选择
- 每一个单独的,简单的.xml
所以,基本上我有2个选项(我认为)
- 解析XML“在旅途中”而流式传输
- 下载压缩的XML然后解析它
我对两者都有麻烦。
解析 “在路上” 的XML流传输的同时
$url = "http://example.xml"; $reader = new XMLReader(); $reader->open($url); $item = array(); while ($reader->read()) { switch ($reader->nodeType) { case (XMLReader::ELEMENT): if ($reader->localName == 'item') { $item = array(); $item['id'] = $reader->getAttribute('id'); while ($reader->read()){ if ($reader->nodeType == XMLReader::ELEMENT) { $name = strtolower($reader->localName); $reader->read(); $item[$name] = $reader->value; } if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->localName == 'item') break; } // Yii framework's mysql query Yii::app()->db->createCommand('INSERT INTO `products` (id, name, parent_id, parent_name, brand, image) VALUES ('.$item['id'].', "'.$item['name'].'", '.$item['parent_id'].', "'.$item['parent_name'].'", "'.$item['brand'].'", "'.$item['img'].'") ')->execute(); }
} }
此代码工作正常与没有mysql查询,而是把各种错误,如果我把它们
分析器错误:在文档
- 下载并结束额外的内容然后解析
说,我想分析里面myxml.tar.gz products.xml,它甚至有可能?
$url = "compress.zlib:///myxml.tar.gz";
$reader = new XMLReader();
$reader->open($url);
$reader->read();
它说,该文件是空的
如果这是一次性的,请使用phpMyAdmin为您导入XML文件 – TonyWilk
我必须每2小时大约做一次。但是谢谢! –
您将通过批量插入到MySQL中获得更多的性能。其次,你可以做一个CRON工作,它调用一个存储过程来在MySQL Db的位置加载一个.XML文件,每两个小时运行一次。 – MackieeE