Hola gente del futuro.
Algunas API nos entregan información en formato XML, por ejemplo facturas que tenemos que leer para generar un PDF e imprimir para cumplir con sus normas contables. Los archivos XML son archivos de texto que podemos leer como cualquier txt
, sin embargo, con PHP tenemos herramientas que nos facilitan las cosas.
En esta ocasión vamos a ver cómo convertir un documento XML en un objeto PHP.
Se requiere tener activa la extensión
libxml
, checa tu archivophp.ini
.
Vamos a suponer que tenemos el archivo mi-archivo.xml
en nuestro servidor:
1<?xml version='1.0' standalone='yes'?> 2<movies> 3 <movie> 4 <title>PHP: Behind the Parser</title> 5 <characters> 6 <character> 7 <name>Ms. Coder</name> 8 <actor>Onlivia Actora</actor> 9 </character> 10 <character> 11 <name>Mr. Coder</name> 12 <actor>El ActÓr</actor> 13 </character> 14 </characters> 15 <plot> 16 So, this language. It's like, a programming language. Or is it a 17 scripting language? All is revealed in this thrilling horror spoof 18 of a documentary. 19 </plot> 20 <great-lines> 21 <line>PHP solves all my web problems</line> 22 </great-lines> 23 <rating type="thumbs">7</rating> 24 <rating type="stars">5</rating> 25 </movie> 26</movies> 27
Para convertirlo en un objeto PHP usamos la función simplexml\_load\_file()
:
1// checha que el archivo exista 2if (file_exists('mi-archivo.xml')) { 3 $xml = simplexml_load_file('mi-archivo.xml'); 4 print_r($xml); 5} else { 6 exit('No existe el archivo mi-archivo.xml'); 7} 8
El resultado que obtenemos es un objeto SimpleXMLElement
:
SimpleXMLElement Object
(
[movie] => SimpleXMLElement Object
(
[title] => PHP: Behind the Parser
[characters] => SimpleXMLElement Object
(
[character] => Array
(
[0] => SimpleXMLElement Object
(
[name] => Ms. Coder
[actor] => Onlivia Actora
)
[1] => SimpleXMLElement Object
(
[name] => Mr. Coder
[actor] => El Actor
)
)
)
[plot] =>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
[great-lines] => SimpleXMLElement Object
(
[line] => PHP solves all my web problems
)
[rating] => Array
(
[0] => 7
[1] => 5
)
)
)
Entonces podemos acceder a cualquiera de las propiedades, por ejemplo, para obtener el título de la película:
1$xml->movie[0]->title; 2
El cero es porque en nuestro XML podemos tener múltiples películas, te invito a probar, agrega tantas películas como quieras y crea el código necesario para imprimir el listado de películas, es decir, sus títulos, comparte tu solución en Twitter con mención a @danielromeroauk
.
La práctica hace al maestro, espero que me dejes ver tu solución. :)
Eso es todo por ahora gente del futuro, nos leemos en el siguiente artículo.