Guardar / Crear XML en PHP

   Como lo prometido es deuda, de hoy en adelante actualizaré mas a menudo el blog, y para ello comenzaré con una entrada que había dejado algo pendiente. Hace poco explicaba como leer archivos XML en PHP, sin embargo nunca explique como guardarlos (crearlos), para ello solo hace falta unas líneas de código.

   Asumiendo que sabemos la estructura básica de un XML, tomaré como referencia el ejemplo anterior, lo primero es declarar el XML:
$xml = new DomDocument('1.0', 'UTF-8');
   Podemos utilizar otras codificaciones, pero a modo de ejemplo seguiremos con utf-8. Luego de esto creamos el nodo principal o raíz:
$raiz = $xml->createElement('raiz');
$raiz = $xml->appendChild($raiz);
   Ahora solo nos queda rellenar dicho nodo con los sub-nodos consecuentes:
$nodo = $xml->createElement('libro');
$nodo = $raiz->appendChild($nodo);
   Como vemos, la forma de agregar nodos es básica y aplica para sub-nodos, por ejemplo:
$subnodo = $xml->createElement('item','texto dentro del item');
$subnodo = $nodo->appendChild($subnodo);
   Una vez hecho esto nuestro código esta listo, solo falta volcarlo a un archivo físico:
$xml->formatOutput = true;
$xml->saveXML();
$xml->save('ruta/archivo.xml');
   Aunque en esta parte podemos variar un poco, si queremos mostrar el XML tal cual como fue creado solo hace falta guardar la salida en una variable y utilizar la función htmlentities ($ xml ):
$el_xml = $xml->saveXML();
echo htmlentities($el_xml);
   Y si queremos no solo guardarlo, sino mostrarlo una vez finalice el proceso, podemos combinar ambas cosas y tener algo como esto:
<?php
  crear(); //Creamos el archivo
  leer();  //Luego lo leemos

  //Para crear el archivo
  function crear(){
    $xml = new DomDocument('1.0', 'UTF-8');

    $biblioteca = $xml->createElement('biblioteca');
    $biblioteca = $xml->appendChild($biblioteca);

    $libro = $xml->createElement('libro');
    $libro = $biblioteca->appendChild($libro);
    
    // Agregar un atributo al libro
    $libro->setAttribute('seccion', 'favoritos');

    $autor = $xml->createElement('autor','Paulo Coelho');
    $autor = $libro->appendChild($autor);

    $titulo = $xml->createElement('titulo','El Alquimista');
    $titulo = $libro->appendChild($titulo);

    $anio = $xml->createElement('anio','1988');
    $anio = $libro->appendChild($anio);

    $editorial = $xml->createElement('editorial','Maxico D.F. - Editorial Grijalbo');
    $editorial = $libro->appendChild($editorial);

    $xml->formatOutput = true;
    $el_xml = $xml->saveXML();
    $xml->save('libros.xml');

    //Mostramos el XML puro
    echo "<p><b>El XML ha sido creado.... Mostrando en texto plano:</b></p>".
         htmlentities($el_xml)."<br/><hr>";
  }

  //Para leerlo
  function leer(){
    echo "<p><b>Ahora mostrandolo con estilo</b></p>";
    $xml = simplexml_load_file('libros.xml');
    $salida ="";
    foreach($xml->libro as $item){
      $salida .=
        "<b>Autor:</b> " . $item->autor . "<br/>".
        "<b>Título:</b> " . $item->titulo . "<br/>".
        "<b>Ano:</b> " . $item->anio . "<br/>".
        "<b>Editorial:</b> " . $item->editorial . "<br/><hr/>";
    }
    echo $salida;
  }
?>