За последние 24 часа нас посетили 60202 программиста и 7160 роботов. Сейчас ищет 2131 программист ...

Спарсить большой XML файл.

Тема в разделе "Прочие вопросы по PHP", создана пользователем Awilum, 20 май 2011.

  1. Awilum

    Awilum Активный пользователь

    С нами с:
    15 ноя 2009
    Сообщения:
    325
    Симпатии:
    26
    Адрес:
    Earth
    чего то так и не понял накапливает ли он данные....
     
  2. Awilum

    Awilum Активный пользователь

    С нами с:
    15 ноя 2009
    Сообщения:
    325
    Симпатии:
    26
    Адрес:
    Earth
    пошел еще одним путем


    Код (Text):
    1.     if(!($fp = fopen('xml/apc101231-42.xml', "r")));
    2.    
    3.     while ($data = fread($fp, 4096)) {
    4.         if (preg_match_all('/<case-file>(.*?)<\/case-file>/msi', $data, $arrXml)) {                                                            
    5.              print_r($arrXml);            
    6.         }      
    7.     }
    но проблем не меньше. первая почему то не все выбирает а только:

    не все данные.

    потом это надо будет как то пропустить через simple XML что бы получить(вставить) в mongodb

     
  3. Awilum

    Awilum Активный пользователь

    С нами с:
    15 ноя 2009
    Сообщения:
    325
    Симпатии:
    26
    Адрес:
    Earth
    сделал иначе


    Код (Text):
    1. <?php
    2.  
    3.     function ExtractString($str, $start, $end) {
    4.         $str_low = strtolower($str);
    5.         $pos_start = strpos($str_low, $start);
    6.         $pos_end = strpos($str_low, $end, ($pos_start + strlen($start)));
    7.         if ( ($pos_start !== false) && ($pos_end !== false) ) {
    8.             $pos1 = $pos_start + strlen($start);
    9.             $pos2 = $pos_end - $pos1;
    10.             return substr($str, $pos1, $pos2);
    11.         }
    12.     }
    13.        
    14.  
    15.     if(!($fp = fopen('xml/apc101231-42.xml', "r")));
    16.    
    17.     while ($data = fread($fp, 4096)) {     
    18.         $match = ExtractString($data, '<case-file>', '</case-file>');      
    19.         echo $match;
    20.     }
    21.  
    22. ?>

    но все равное почему то не доконца выберает

    <correspondent>
    <address-1>?</address-1>
    </correspondent>
     
  4. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
  5. Awilum

    Awilum Активный пользователь

    С нами с:
    15 ноя 2009
    Сообщения:
    325
    Симпатии:
    26
    Адрес:
    Earth
    Запустил скрипт на линуксе(правда без Монги) все отлично! спарсило намного быстрее и потребило оперативки 1 метр! на 400 метров xml файла. Вообщем завтра еще с монгой проверю. А в винде жрет не мерено памяти, жирная утечка в Винде