Загрузите сжатый XML-файл с помощью файла загрузки simplexml()


Я пытаюсь загрузить сжатый XML-файл с помощью функции PHP simplexml_load_file(), но я не знаю, как его декодировать, чтобы я мог использовать содержащиеся в нем данные.

Author: hakre, 2011-08-07

3 answers

Прочитайте его в строку, используя file_get_contents() распакуйте его с помощью gzuncompress() и загрузите строку в виде XML, используя simplexml_load_string().

 3
Author: hakre, 2013-02-20 11:31:13

PHP поддерживает встроенную поддержку сжатия zlib, просто добавьте путь к вашему файлу с данными gzip с помощью compress.zlib://, и все готово:

$xml = simplexml_load_file("compress.zlib://test.xml");

Работает как заклинание.

 11
Author: hakre, 2011-08-07 16:20:03
/*EDIT  print_r(gzdecoder(simplexml_load_file('test.xml')));
 (Not sure without testing that the internals of what loads the xml 
  in *_load_file would see the gzipped content as invalid)
*/

   $xml=simplexml_load_string(gzdecoder(file_get_contents('test.xml')));
   print_r( $xml);

function gzdecoder($d){
    $f=ord(substr($d,3,1));
    $h=10;$e=0;
    if($f&4){
        $e=unpack('v',substr($d,10,2));
        $e=$e[1];$h+=2+$e;
    }
    if($f&8){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&16){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&2){
        $h+=2;
    }
    $u = gzinflate(substr($d,$h));
    if($u===FALSE){
        $u=$d;
    }
    return $u;
}
 4
Author: Lawrence Cherone, 2011-08-07 15:54:46