1. Code
  2. Coding Fundamentals
  3. XML

Analiza XML para convertirlo a un arreglo en PHP con SimpleXML

Scroll to top

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

En esta publicación, aprenderás cómo analizar XML para convertirlo a un arreglo en PHP. SimpleXML es una extensión de PHP que hace que esto sea posible.

Durante tu desarrollo cotidiano con PHP, en ocasiones tendrás que trabajar con contenido XML. Ya sea que estés exportando datos como documentos XML o procesando documentos XML entrantes en tu aplicación, siempre es útil tener una biblioteca que pueda realizar estas operaciones sin problemas. Cuando se trata de trabajar con XML en PHP, existen diferentes formas de entre las que puedes elegir. De hecho, hay diferentes extensiones disponibles en PHP que te permiten leer y analizar documentos XML.

El analizador XML de PHP está basado en la biblioteca Expat de James Clark, que es una biblioteca XML orientada a streams escrita en C. Esta biblioteca analizadora de XML te permite analizar documentos XML, pero no es capaz de hacer una validación. Está basada en eventos y orientada a streams, por lo que es realmente útil cuando estás trabajando con archivos XML verdaderamente grandes, aunque un poco más complicada de lo que debería ser para archivos pequeños. La otra opción es la extensión SimpleXML, que es una de las extensiones más populares usadas por la comunidad de PHP para procesar documentos XML. La extensión SimpleXML te permite analizar documentos XML muy fácilmente, tal como si estuvieras leyendo un archivo en PHP.

En este artículo, vamos a usar la extensión SimpleXML para demostrar cómo puedes convertir contenido XML a un arreglo. Si quieres seguir el ejemplo de este artículo, asegúrate de haber instalado la extensión SimpleXML en tu instalación de PHP.

La extensión SimpleXML de PHP

La extensión SimpleXML de PHP proporciona un conjunto de herramientas completo que puedes usar para leer, escribir y analizar documentos XML en tus aplicaciones de PHP. Es importante observar que la extensión SimpleXML requiere PHP 5 como mínimo. Además, también requiere la extensión libxml de PHP.

La extensión SimpleXML está habilitada de forma predeterminada, pero si deseas verificar si está habilitada en tu instalación de PHP, puedes revisar rápidamente usando la función phpinfo().

The phpinfo FunctionThe phpinfo FunctionThe phpinfo Function

Como puedes observar, deberías ver la sección SimpleXML en la salida de la función phpinfo().

La extensión SimpleXML proporciona diferentes funciones que puedes usar para leer y analizar el contenido XML.

Cargando una cadena o archivo XML con SimpleXML

Por ejemplo, si deseas analizar el archivo XML, puedes usar la función simplexml_load_file(). La función simplexml_load_file() te permite leer y analizar el archivo XML en una sola llamada. Por otro lado, si tienes una cadena XML que quieres convertir a un objeto de tipo documento XML, puedes usar la función simplexml_load_string().

También puedes usar la función file_get_contents() para leer el contenido del archivo y enviar la cadena resultante a la función simplexml_load_string(), que eventualmente la analiza y la convierte a un objeto. Alternativamente, si prefieres la forma orientada a objetos, también podrías usar la clase SimpleXMLElement y sus métodos de utilidad para convertir una cadena XML a un objeto.

En este artículo, vamos a usar la función simplexml_load_file() para leer un archivo XML y veremos cómo convertirlo a un arreglo. Después, analizaremos un ejemplo real para demostrar cómo hacer esto.

Cómo convertir XML a un arreglo con PHP

En esta sección veremos cómo puedes convertir contenido XML a un arreglo.

En primer lugar, revisemos rápidamente los pasos que necesitas seguir para convertir contenido XML a un arreglo con la ayuda de la extensión SimpleXML.

  • Lee el contenido del archivo y analízalo. Al final de este paso, el contenido se analiza y se convierte al formato de objeto SimpleXMLElement. Vamos a usar la función simplexml_load_file() para lograr esto.
  • A continuación necesitas convertir el objeto SimpleXMLElement a una representación JSON usando la función json_encode().
  • Finalmente, necesitas usar la función json_decode() para decodificar el contenido JSON, de manera que eventualmente genere un arreglo de todos los documentos.

Para fines de la demostración, supongamos que tenemos un archivo XML como se muestra en el siguiente fragmento de código. Lo llamaremos employees.xml. Este contiene los detalles básicos de todos los empleados. Nuestro objetivo es convertirlo en un arreglo que puedas usar para procesarlo posteriormente.

1
<?xml version='1.0'?>   
2
<employees>   
3
    <employee id="1">
4
        <name>John</name>   
5
        <email>john@example.com</email>
6
        <address>
7
           <street>3201  Glendale Avenue</street>
8
           <city>Los Angeles</city>
9
           <state>CA</state>
10
        </address>
11
    </employee>
12
    <employee id="2">
13
        <name>Mike</name>
14
        <email>mike@example.com</email>
15
        <address>
16
           <street>781  Stroop Hill Road</street>
17
           <city>Duluth</city>
18
           <state>GA</state>
19
        </address>
20
    </employee>
21
</employees>

Como puedes ver, el archivo employees.xml contiene los nombres y los correos electrónicos de los empleados. Es importante destacar que el valor employee-id se envía como un atributo de la etiqueta <employee>.

A continuación, crea el archivo simplexml.php con el siguiente contenido.

1
<?php
2
libxml_use_internal_errors(TRUE);
3
4
$objXmlDocument = simplexml_load_file("employees.xml");
5
6
if ($objXmlDocument === FALSE) {
7
    echo "There were errors parsing the XML file.\n";
8
    foreach(libxml_get_errors() as $error) {
9
        echo $error->message;
10
    }
11
    exit;
12
}
13
14
$objJsonDocument = json_encode($objXmlDocument);
15
$arrOutput = json_decode($objJsonDocument, TRUE);
16
17
echo "<pre>";
18
print_r($arrOutput);
19
?>

Revisemos los fragmentos de código importantes del ejemplo anterior para comprender cómo funciona.

Lee y analiza el archivo XML

En primer lugar, hemos usado la función libxml_use_internal_errors() para deshabilitar los errores estándar de libxml y habilitar la gestión de errores realizada por el usuario. De esta manera, podemos detectar los errores XML durante el análisis y mostrarlos de una manera fácil de entender. Esto también es realmente útil en la fase de desarrollo.

A continuación, hemos usado la función simplexml_load_file() para leer y analizar el archivo employees.xml. El primer argumento de la función simplexml_load_file() es una ruta al archivo XML. Es importante destacar que necesitas ajustar esta ruta según sea necesario. En el ejemplo anterior, se asume que el archivo employees.xml se encuentra en el mismo nivel de directorio que el archivo simplexml.php. Si el archivo XML se analiza correctamente, este devuelve un objeto de la clase SimpleXMLElement, de lo contrario devuelve FALSE.

A continuación, si la variable $objXmlDocument tiene el valor FALSE, significa que hubo un problema al analizar el archivo employees.xml. En ese caso, usamos la función libxml_get_errors() para recuperar todos los errores y mostrarlos con fines de depuración. La variable $objXmlDocument tendrá el valor TRUE si el archivo employees.xml se analiza correctamente.

Convierte el objeto SimpleXMLElement a su representación JSON

A continuación, hemos usado la función json_encode() para convertir el objeto SimpleXMLElement a su representación JSON. Hemos almacenado la cadena JSON en la variable $objJsonDocument, como se muestra en el siguiente fragmento de código.

1
$objJsonDocument = json_encode($objXmlDocument);

Decodifica la cadena JSON y conviértela en un arreglo

Finalmente, hemos usado la función json_decode() para decodificar los datos de la cadena JSON. Es importante destacar que hemos enviado TRUE en el segundo argumento de la función json_decode() que convierte todos los objetos en arreglos asociativos.

1
$arrOutput = json_decode($objJsonDocument, TRUE);

Si no hubieras enviado TRUE en el segundo argumento, la función json_decode habría producido objetos de tipo StdClass en lugar de arreglos.

Así que ese es un resumen de todo el proceso. Ejecutemos el archivo simplexml.php, y deberías ver la siguiente salida.

1
Array
2
(
3
    [employee] => Array
4
        (
5
            [0] => Array
6
                (
7
                    [@attributes] => Array
8
                        (
9
                            [id] => 1
10
                        )
11
                    [name] => John
12
                    [email] => john@example.com
13
                    [address] => Array
14
                        (
15
                            [street] => 3201  Glendale Avenue
16
                            [city] => Los Angeles
17
                            [state] => CA
18
                        )
19
                )
20
21
            [1] => Array
22
                (
23
                    [@attributes] => Array
24
                        (
25
                            [id] => 2
26
                        )
27
                    [name] => Mike
28
                    [email] => mike@example.com
29
                    [address] => Array
30
                        (
31
                            [street] => 781  Stroop Hill Road
32
                            [city] => Duluth
33
                            [state] => GA
34
                        )
35
                )
36
        )
37
)

Como era de esperar, el arreglo contiene todos los documentos. Si te has dado cuenta, también ha analizado el campo id adjunto a cada documento en forma de atributo, y puedes acceder a el con la clave @attributes como se muestra en la salida anterior. Básicamente, todo está disponible en forma de pares clave-valor. Así que ahora tienes un arreglo completo a tu disposición para procesarlo posteriormente.

Así es como puedes convertir el contenido XML en un arreglo en PHP. Fue un ejemplo muy simple, pero debería proporcionarte una idea de todo el proceso.

Conclusión

En este artículo, discutimos cómo convertir un archivo XML a un arreglo usando PHP y SimpleXML. La extensión SimpleXML es verdaderamente útil cuando se trata de analizar y manipular documentos XML.


Los mejores scripts de PHP en CodeCanyon

Las bibliotecas gratuitas en Packagist son maravillosas para la funcionalidad básica: el fundamento de una buena aplicación. Sin embargo, para funciones más especializadas o para aplicaciones completas que puedes usar y personalizar, echa un vistazo a los scripts profesionales de PHP en CodeCanyon.

Explora miles de los mejores y más útiles scripts de PHP alguna vez creados en CodeCanyon.

ImageImageImage

Estos son algunos de los scripts de PHP mejor vendidos y más prometedores disponibles en CodeCanyon para 2020.

Aprende PHP con un curso gratuito en línea

Si quieres aprender PHP, ¡consulta nuestro curso gratuito en línea sobre los fundamentos de PHP!

Please accept preferences cookies to load this content.
Image

En este curso, aprenderás los fundamentos de la programación en PHP. Comenzarás con los conceptos básicos, aprendiendo cómo funciona PHP y escribiendo bucles y funciones simples en él. Luego avanzarás a la codificación de clases para una simple programación orientada a objetos (POO). En el camino, aprenderás las habilidades más importantes para escribir aplicaciones para la web: tendrás la oportunidad de practicar cómo responder a las solicitudes GET y POST, analizar JSON, autenticar usuarios y usar una base de datos MySQL.