skray

parser_xml

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