SimpleXML es una extensión de PHP que nos permite leer archivos XML como si te tratara de matrices de una manera realmente sencilla.
Toma un archivo XML y lo representa en memoria, de manera que nos permite manipular el valor de las variables para posteriormente poder guardar el documento modificado.
En este caso vamos a tomar como ejemplo un catálogo de coches ordenados por marcas y modelos en un archivo XML. Como atributo, le añadimos a cada coche su color de pintura.
<?xml version="1.0" encoding="ISO-8859-1" ?> <coches> <marca nombre="Ford"> <modelo color="negro">Fiesta</modelo> <modelo color="verde">Focus</modelo> </marca> <marca nombre="SEAT"> <modelo color="rojo">Ibiza</modelo> <modelo color="azul">Cordoba</modelo> </marca> <marca nombre="Peugeot"> <modelo color="marron">206</modelo> <modelo color="naranja">306</modelo> </marca> </coches>
En primer lugar vamos a mostrar cómo mostrar el contenido de este archivo XML con un sencillo código en PHP.
Ejemplo 1:
<?php $xml = simplexml_load_file('coches.xml'); foreach($xml->marca as $marca){ echo "<b><u>".$marca['nombre']."</u></b><br />"; foreach($marca->modelo as $modelo){ echo "[Modelo] ".$modelo." - [Color] ".$modelo['color']."<br />"; } } ?>
Lo que nos da la siguiente salida:
Ford [Modelo] Fiesta - [Color] negro [Modelo] Focus - [Color] verde SEAT [Modelo] Ibiza - [Color] rojo [Modelo] Cordoba - [Color] azul Peugeot [Modelo] 206 - [Color] marron [Modelo] 306 - [Color] naranja
Ahora vamos a ver otro ejemplo en el que cambiamos el valor de un atributo y posteriormente guardamos la estructura XML en un archivo de texto.
Ejemplo 2:
<?php $xml = simplexml_load_file('coches.xml'); foreach($xml->marca as $marca){ foreach($marca->modelo as $modelo){ if ($modelo['color'] == "rojo"){ $modelo['color'] = "rojo oscuro"; } } } $output = $xml->asXml(); file_put_contents('nuevos_colores.xml', $output); ?>
La instrucción $xml->asXml() nos devuelve el documento XML en una cadena, que almacenamos en la variable ‘$output’ que posteriormente utilizamos como contenido para guardar en el archivo ‘nuevos_colores.xml’ mediante ‘file_put_contents()’