piterskiy

XML - SQLite

Feb 21st, 2016
23,892
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?
  2. // парсинг товарного XML фида в базу SQLite
  3. // http://php5.kiev.ua/manual/ru/class.xmlreader.html
  4. // http://phppot.com/php/php-xml-reader/
  5. // http://i.kenfin.ru/article/parsim-xml-s-pomoschju-xmlreader
  6.  
  7. Error_Reporting(E_ALL);
  8. ini_set('display_errors', TRUE);
  9. @ini_set('memory_limit', '512M');
  10. @set_time_limit(0);
  11. @ini_set('max_execution_time',0);
  12. @ini_set('set_time_limit',0);
  13. @ob_end_flush();
  14. $start_time = microtime(true);
  15. $_db = "data/new.db";               // название будущей базы - папка data в данном примере должна уже быть создана
  16. $_xml = "2Gb.xml";                  // xml файл, который нужно распарсить
  17.  
  18.  
  19. function opendbx()
  20. {
  21.     global $_db,$dbx;
  22.     $dbx = new SQLite3($_db);
  23.     $dbx->busyTimeout(5000);
  24.     $dbx->exec('PRAGMA journal_mode=WAL;');
  25. }
  26.  
  27.  
  28. if (!file_exists($_db))
  29. {
  30.     opendbx();
  31.     $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);');
  32.     $dbx->close();
  33. }
  34.  
  35. opendbx();                  // открываем базу
  36.  
  37. $reader = new XMLReader();  // запускаем паука XMLReader
  38. $reader->open($_xml);
  39. $g=0;
  40.  
  41.  
  42. function kvchnah($ssl)      // удаляем кавычки
  43. {
  44.     $ssl=preg_replace("/\"|\'/",'',$ssl);
  45.     return $ssl;
  46. }
  47.  
  48.  
  49. $dbx->exec('BEGIN IMMEDIATE;');
  50.  
  51. while ($reader->read())
  52. {
  53.     if ($reader->nodeType == XMLREADER::ELEMENT&&$reader->localName == 'offer') // находим блок offer
  54.     {  
  55.         $offer = new SimpleXMLElement($reader->readouterXML());                 // передаем найденный блок функции SimpleXML в ОЗУ и распарсиваем блок
  56.         $sname = kvchnah($offer->name);
  57.         $price = kvchnah($offer->price);
  58.         $picture = $offer->picture;
  59.         $original_picture = $offer->original_picture;
  60.         $description = kvchnah($offer->description);
  61.         $vendor = kvchnah($offer->vendor);
  62.         $model = kvchnah($offer->model);
  63.         $url = $offer->url;
  64.         $attr = $offer->attributes();
  65.         $gs_category = $attr['gs_category_id'];
  66.         $merchant_id = $attr['merchant_id'];
  67.         $article = $attr['article'];
  68.         $productkey = $attr['gs_product_key'];
  69.         $_id = $attr['id'];
  70.        
  71.         // записываем все в БД
  72.         $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."');");
  73.        
  74.         if($g/200==intval($g/200))
  75.         {
  76.             $dbx->exec('COMMIT;');
  77.             $dbx->exec('BEGIN IMMEDIATE;');
  78.             echo "$g -  <br>";
  79.         }              
  80.         $g++;                  
  81.     }
  82. }
  83.        
  84. $dbx->exec('COMMIT;');
  85. $dbx->close();
  86.  
  87. $exec_time = round(microtime(true) - $start_time, 3);
  88. $memory = round(memory_get_usage() / 1024, 3);
  89. echo '<br><hr><br> Время: '.$exec_time.' сек. | Память: '.$memory.' Kb. ';
  90.  
  91. ?>
Advertisement
Add Comment
Please, Sign In to add comment