jueves, 30 de mayo de 2013

Como convertir un archivo o string XML en un array en PHP 5, usando SimpleXML

La solución es muy sencilla, para este ejemplo, utilizaremos la librería SimpleXML. Esta libería requiere la extensión de PHP libxml y funciona a partir de PHP 5.

Voy a usar el xml de ejemplo que viene en la documentación de PHP.
# aquí debes poner la ruta y el nombre de tu archivo xml
$xmlstring = realpath(dirname(__FILE__)) . '/xmls/prueba.xml';

if (!file_exists($xmlstring)) {
   trigger_error(__FILE__: {$xmlstring}", E_USER_ERROR);
   return;
}

$xml = simplexml_load_file($xmlstring);
        
$json = json_encode($xml);
$array = json_decode($json, TRUE);
echo '<pre>';
print_r($xml);
echo '</pre>';

echo '<pre>';
print_r($array);
echo '</pre>';
Nota: el inconveniente de pasar el objeto XML a un array con esta técnica, es que se pierden los atributos de los elementos, como en el caso de los atributos del elemento <puntuacion>, que se pierden los atributos "tipo", pero seguramente para determinados casos esta sencilla técnica puede servir muy bien.

El resultado de este ejemplo para el objeto simpleXML sería:

SimpleXMLElement Object
(
    [pelicula] => SimpleXMLElement Object
        (
            [titulo] => PHP: Tras el Parser
            [personajes] => SimpleXMLElement Object
                (
                    [personaje] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [nombre] => Srta. Programadora
                                    [actor] => Onlivia Actora
                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [nombre] => Sr. Programador
                                    [actor] => El Actor
                                )

                        )

                )

            [argumento] => 
            Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un
            lenguaje interpretado? Lo descubrirás en esta intrigante y temible parodia
            de un documental.
        
            [grandes-lineas] => SimpleXMLElement Object
                (
                    [linea] => PHP soluciona todos los problemas web
                )

            [puntuacion] => Array
                (
                    [0] => 7
                    [1] => 5
                )

        )

)

El resultado de este ejemplo para el array sería:

Array
(
    [pelicula] => Array
        (
            [titulo] => PHP: Tras el Parser
            [personajes] => Array
                (
                    [personaje] => Array
                        (
                            [0] => Array
                                (
                                    [nombre] => Srta. Programadora
                                    [actor] => Onlivia Actora
                                )

                            [1] => Array
                                (
                                    [nombre] => Sr. Programador
                                    [actor] => El Actor
                                )

                        )

                )

            [argumento] => 
            Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un
            lenguaje interpretado? Lo descubrirás en esta intrigante y temible parodia
            de un documental.
        
            [grandes-lineas] => Array
                (
                    [linea] => PHP soluciona todos los problemas web
                )

            [puntuacion] => Array
                (
                    [0] => 7
                    [1] => 5
                )

        )

)

No hay comentarios:

Publicar un comentario

Datos personales

Mi foto
Podrás encontrar códigos recursos y artículos sobre PHP, JavaScript, jQuery, MooTools, Ajax, CSS, HTML, UML, RUP, AUP, XP (eXtreme Programming), Six-Sigma, CMMI, FrameWorks, Zend Framework, Magento, CodeIgniter, CakePHP, Joomla 1.5, Doctrine, Active Record, ORM, POO, MVC, MySql, PostgreSql. Este espacio está destinado a ayudar y compartir un poco de lo mucho que he recibido de la comunidad en la Red.