Analiza XML para convertirlo a un arreglo en PHP con SimpleXML
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().



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ónsimplexml_load_file()para lograr esto. - A continuación necesitas convertir el objeto
SimpleXMLElementa una representación JSON usando la funciónjson_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.



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


PHP11 de los mejores calendarios de eventos y scripts de reserva de PHP... y 3 opciones gratuitasMonty Shokeen

PHP10 de los mejores scripts acortadores de URLs de PHPMonty Shokeen

PHP18 de los mejores scripts de formularios de contacto de PHP para 2020Monty Shokeen

PHPComparando los 5 mejores generadores de formularios de PHP (y 4 scripts gratuitos)Monty Shokeen

PHPCrea hermosos formularios con PHP Form BuilderAshraff Hathibelagal
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!
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.
- GRATUITO


PHPFundamentos de PHPJeremy McPeak



