我必須爲我的商店(產品,價格,類別)解析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