2009-07-27 9 views
8

Estoy luchando para leer gzipped xml files en php.PHP open gzipped XML

que tuvieron éxito en la lectura de archivos XML normales, usando XMLReader() así:

$xml = new XMLReader(); 
$xml->open($linkToXmlFile); 

Sin embargo, esto no funciona cuando está comprimido con gzip el archivo XML. ¿Cómo puedo descomprimir el archivo y leerlo con XMLReader?

Respuesta

20

Como no se ha especificado una versión de PHP, voy a asumir que usted está usando PHP5.

Me pregunto por qué la gente no ha sugerido usar el built in PHP compression streams API.

$linkToXmlFile = "compress.zlib:///path/to/xml/file.gz"; 
$xml = new XMLReader(); 
$xml->open($linkToXmlFile); 

Por lo que entiendo, bajo las sábanas, será transparente descomprimir el archivo para usted y permitirá leer como si fuera un archivo XML sin formato. Ahora, eso puede ser una gran subestimación.

+0

no sabía que existía, excelente sugerencia :) – Mark

+0

de hecho es algo como esto lo que estoy buscando ... Lo intentaré esta noche ... – Fortega

+0

¡Gracias, funciona! – Fortega

3

Tal vez la función gzdecode podría ayudarle a: el manual dice (cita):

Decodifica una cadena gzip comprimido

Por lo tanto, habría que:

  • descargue los datos XML
  • obténgalo como una cadena
  • descomprimirlo con gzdecode
  • trabajar en él con XMLReader

Eso dependería de la extensión correcta (zlib supongo) beeing instalado en el servidor, aunque ...

Mark : Ampliando la publicación de Pascal, aquí hay un código de ejemplo que debería funcionar para usted

$xmlfile = fopen($linkToXmlFile,'rb'); 
$compressedXml = fread($xmlfile, filesize($linkToXmlFile)); 
fclose($xmlfile); 
$uncompressedXml = gzdecode($compressedXml); 

$xml = new XMLReader(); 
$xml->xml($uncompressedXml); 
1

La expansión en el poste de Pascal, aquí es un código de ejemplo que debería funcionar para usted

$xmlfile = fopen($linkToXmlFile,'rb'); 
$compressedXml = fread($xmlfile, filesize($linkToXmlFile)); 
fclose($xmlfile); 
$uncompressedXml = gzdecode($compressedXml); 

$xml = new XMLReader(); 
$xml->xml($uncompressedXml); 
+0

Si se trata de agregar un código-ejemplo, ¿por qué no edita la publicación dependiente y la agrega? – hakre