Мне нужно разобрать 3 удаленных файла XML для моего магазина (продукты, цены, категории), самый большой из них - около 500 МБ +. Я должен разбирать их и вставлять в базу данных 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 не запрашивает, но бросает все виды ошибки, если я их поставил
Ошибка синтаксического анализа: Дополнительное содержание в конце документа
- Скачать и затем разобрать
сказать, что я хочу, чтобы разобрать products.xml внутри myxml.tar.gz, это даже возможно ?
$url = "compress.zlib:///myxml.tar.gz";
$reader = new XMLReader();
$reader->open($url);
$reader->read();
это говорит о том, что файл пуст
Если это одноразовый, используйте phpMyAdmin для импорта XML-файла для вас. – TonyWilk
Я должен делать это каждые 2 часа. но спасибо! –
Вы получите гораздо большую производительность, выбрав Batch Inserting to MySQL. Во-вторых, вы можете выполнить задание CRON, которое вызывает хранимую процедуру для загрузки файла .XML в месте, где MySQL Db запускается каждые два часа. – MackieeE