En este artículo aprenderemos cómo leer un archivo XML con PHP. Para lograr este objetivo estaremos utilizando un archivo de ejemplo el cual contendrá una lista de canciones con ciertas propiedades como el título de la canción, el artista y el género al cual pertenecen.
Lo primero que debemos realizar es crear el archivo con extensión .xml con el siguiente contenido (estaremos nombrando al archivo como canciones.xml):
<canciones> <cancion> <titulo>La Guiterra</titulo> <artista>Los autenticos decadentes</artista> <genero>Rock</genero> </cancion> <cancion> <titulo>I bet you look good on the dance floor</titulo> <artista>Arctic Monkeys</artista> <genero>Indie Rock</genero> </cancion> <cancion> <titulo>Master of Puppets</titulo> <artista>Metallica</artista> <genero>Metal</genero> </cancion> <cancion> <titulo>Smoke on the water</titulo> <artista>Deep purple</artista> <genero>Rock</genero> </cancion> </canciones>
Si abrimos el archivo con un navegador web, se verá de la siguiente forma (para verificar que se encuentre correctamente escrito):
Como se puede observar, se encuentran 4 canciones listadas en formato XML dentro del archivo. Estaremos leyendo cada una de ellas y luego imprimiendo el contenido de forma ordenada. Para lograr esto, vamos a utilizar la función simplexml_load_file propia de PHP la cual toma como parámetro la ubicación de un archivo XML y lo convierte en un objeto el cual podemos accederlo de manera muy sencilla.
$canciones = simplexml_load_file("canciones.xml");
Ahora que tenemos guardado el archivo .xml en la variable $canciones, vamos a iterar sobre esta variable recorriendo su contenido con un bucle foreach de la siguiente forma, imprimiendo el contenido de cada canción:
foreach($canciones as $cancion) { echo "Titulo: " . $cancion->titulo; echo "<br>"; echo "Artista: " . $cancion->artista; echo "<br>"; echo "Genero: " . $cancion->genero; echo "<br>"; echo "<br>"; }
Como podemos observar, en cada canción imprimimos el título, artista y género. Podemos acceder a estos valores como si fuesen valores dentro de un objeto. El código completo para realizar esta lectura es el siguiente:
<?php $canciones = simplexml_load_file("canciones.xml"); foreach($canciones as $cancion) { echo "Titulo: " . $cancion->titulo; echo "<br>"; echo "Artista: " . $cancion->artista; echo "<br>"; echo "Genero: " . $cancion->genero; echo "<br>"; echo "<br>"; } ?>
Si ha salido todo bien, debería verse de la siguiente forma: