2017-01-19 2 views
1

Здравствуйте, я пытаюсь получить все данные из XML-файла, поэтому я использовал функцию xmltoassoc. Он работает с файлом 5 мб, но не более 9 мб.php xmlreader не возвращает полные данные

Вот мой код: Я изменил эту функцию, чтобы получить JSon кода,

function xml2assoc($xml, $name) 
{ 
    $tree = null; 
    while($xml->read()) 
    { 
     if($xml->nodeType == XMLReader::END_ELEMENT) 
     { 
      return $tree; 
     }   
     else if($xml->nodeType == XMLReader::ELEMENT) 
     { 
      $node = array();    
      if($xml->hasAttributes) 
      { 
       $attributes = array(); 
       while($xml->moveToNextAttribute()) 
       { 
        $attributes[$xml->name] = $xml->value; 
       } 
      } 

      if(!$xml->isEmptyElement) 
      {    
       $childs = xml2assoc($xml, $node['tag']); 
       if(isset($childs['text'])) 
       { 
        $tree = $childs; 
       } else { 
        $tree['text'] = $childs[0]; 
       } 
      } 
     }   
     else if($xml->nodeType == XMLReader::TEXT) 
     { 
      if(isset($xmlArr['text'])) 
      { 
       $tree = $xmlArr; 
      } else { 
       $tree['text'] = $xmlArr[0]; 
      }    
     } 
    } 
    return $tree; 
} 

Я использовал эту функцию, чтобы вернуть JSON пропускания URL.

function PARSE_XML_JSON($url) 
{ 
    $text = ""; 
    $xml = new XMLReader(); 
    $xml->open($url); 
    $assoc = xml2assoc($xml, "root"); 
    $xml->close(); 
    if(isset($assoc['text'])) 
    { 
     $text = $assoc['text']; 
    } 
    //StoreInTxtFile($text); 
    return $text; 
} 

Я также попытался сохранить данные в файлах, делая это:

function StoreInTxtFile($data) 
{ 
    $myFile = 'jsonfile-'.time().'.txt'; 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    fwrite($fh, $data); 
    fclose($fh); 
} 

Пожалуйста, скажите мне, что я не хватает. Благодаря

+0

см ссылке: http://stackoverflow.com/questions/1167062/best-way-to-process-large-xml-in-php –

+0

и это: HTTP : //stackoverflow.com/questions/911663/parsing-huge-xml-files-in-php –

ответ

1

использование LIBXML_PARSEHUGE

 $xml = new XMLReader(); 
     $xml->open($url, NULL, LIBXML_PARSEHUGE); 
+0

Спасибо, Билал. он работал после добавления 'LIBXML_PARSEHUGE'. –

Смежные вопросы