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()’

Sin categoría

Deja una respuesta