PHP y XML con SimpleXML
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()’





