Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- // парсилка xml выгрузки слона любого размера в базу SQLite
- // © skray 22.02.2016
- Error_Reporting(E_ALL);
- ini_set('display_errors', TRUE);
- @ini_set('memory_limit', '512M');
- @set_time_limit(0);
- @ini_set('max_execution_time',0);
- @ini_set('set_time_limit',0);
- @ob_end_flush();
- $start_time = microtime(true);
- $_db="data/slonxml.db"; // название будущей базы // папка data в данном примере должна уже быть создана
- $_xml="automagnitol.xml"; // xml файл, который нужно распарсить
- function opendbx()
- {
- global $_db,$dbx;
- $dbx = new SQLite3($_db);
- $dbx->busyTimeout(5000);
- $dbx->exec('PRAGMA journal_mode=WAL;');
- }
- if (!file_exists($_db))
- {
- opendbx();
- $dbx->exec('CREATE TABLE IF NOT EXISTS xml (id INTEGER PRIMARY KEY, _id TEXT, merchant_id TEXT, gs_product_key TEXT, article TEXT, gs_category_id TEXT, picture TEXT, original_picture TEXT, name TEXT, description TEXT, vendor TEXT, model TEXT, url TEXT, price TEXT, rezint INTEGER, reztxt TEXT);');
- $dbx->close();
- }
- opendbx(); // открываем базу
- $reader = new XMLReader(); // запускаем паука XMLReader
- $reader->open($_xml);
- $g=0;
- function kvchnah($ssl) // удаляем кавычки
- {
- $ssl=preg_replace("/\"|\'/",'',$ssl);
- return $ssl;
- }
- $dbx->exec('BEGIN IMMEDIATE;');
- while ($reader->read())
- {
- if ($reader->nodeType == XMLREADER::ELEMENT&&$reader->localName == 'offer') // находим блок offer
- {
- $offer = new SimpleXMLElement($reader->readouterXML()); // передаем найденный блок функции SimpleXML в оперативную память и распарсиваем блок
- $sname= kvchnah($offer->name);
- $price= kvchnah($offer->price);
- $picture = $offer->picture;
- $original_picture = $offer->original_picture;
- $description = kvchnah($offer->description);
- $vendor = kvchnah($offer->vendor);
- $model = kvchnah($offer->model);
- $url = $offer->url;
- $attr=$offer->attributes();
- $gs_category = $attr['gs_category_id'];
- $merchant_id = $attr['merchant_id'];
- $article=$attr['article'];
- $productkey=$attr['gs_product_key'];
- $_id=$attr['id'];
- // записываем в базу
- $dbx->exec("INSERT INTO xml (_id, merchant_id, gs_product_key, article, gs_category_id, picture, original_picture, name, description, vendor, model, url, price) VALUES ('".$_id."', '".$merchant_id."', '".$productkey."', '".$article."', '".$gs_category."', '".$picture."', '".$original_picture."', '".$sname."', '".$description."', '".$vendor."', '".$model."', '".$url."', '".$price."');");
- if($g/200==intval($g/200))
- {
- $dbx->exec('COMMIT;');
- $dbx->exec('BEGIN IMMEDIATE;');
- echo "$g - <br>";
- }
- $g++;
- }
- }
- $dbx->exec('COMMIT;');
- $dbx->close();
- $exec_time = round(microtime(true) - $start_time, 3);
- $memory = round(memory_get_usage() / 1024, 3);
- echo '<br><hr><br> Time: '.$exec_time.' Sec. | Memory: '.$memory.' Kb. ';
- ?>
Advertisement
Add Comment
Please, Sign In to add comment