jueves, 14 de julio de 2011

Parsear ficheros XML grandes

Cuando tenemos que integrarnos con servicios de terceros, lo más normal es que intercambiemos la información en formato XML o JSON (esto se está poniendo de moda últimamente). Con PHP4, parsear XML es poco menos que un suplicio, pero con PHP5 la cosa cambia.
Disponemos de la extensión SimpleXML que, de forma muy sencilla, nos permite indicar un XML de entrada y lo tendremos cargado en un bonito y accesible objeto.
Sin embargo, esta solución no es viable cuando vamos a procesar XML de gran tamaño, ya que estaríamos cargando toda la información en memoria. Normalmente no será necesario, ya que lo que se suele hacer es recorrer el XML buscando alguna información concreta, o bien convertirlo a otro formato o cargarlo en nuestra base de datos.
Para este tipo de operaciones es mejor usar la extensión XMLReader. Su funcionamiento es parecido al de un cursor que va recorriendo el XML. Por tanto, al no parsearlo entero, el consumo de memoria es mucho menor.
Vistas estas dos alternativas (hay algunas más), a la hora de procesar un XML entero una buena solución puede ser combinar ambos métodos. Es decir, usar XMLReader para ir recorriendo los nodos e ir cargando cada uno de ellos con SimpleXML, para que el manejo de la información contenida sea trivial.
Sería algo así:
Fuente: http://stackoverflow.com/questions/1835177/how-to-use-xmlreader-in-php

No hay comentarios:

Publicar un comentario