Generar XML a partir de SQL utilizando PHP

   Anteriormente había publicado en "esta entrada" como generar un XML utilizando PHP, sin embargo esto no es muy útil si no disponemos de un contenido dinámico al cual queramos acceder, es por ello que en esta entrada explicare como agregar y modificar un poco el "ejemplo anterior" para crear un archivo dinámico a partir de una consulta SQL.

   Lo primero es conectarnos con el servidor MySQL, la forma práctica de hacerlo es utilizando la librería MySQLi.
$bd = new mysqli('localhost', 'usuario_sql', 'clave_sql', 'bd_sql') or die("Error al conectar con MySQL-> ".mysql_error());
   Lo siguiente será modificar el script para hacer la consulta y almacenar los datos, como ya se ha explicado muchas veces como se hacen consultas SQL y manipulan datos en el blog, simplemente expondré el código:
<?php
  crear(); //Creamos el archivo
  leer();  //Luego lo leemos
  
  //Para crear el archivo
  function crear(){
      $bd = new mysqli('localhost', 'usuario_sql', 'clave_sql', 'bd_sql') or die("Error al conectar con MySQL-> ".mysql_error());
   
       $stmt = $bd->prepare("SELECT autor, titulo, anio, editorial FROM libros");
       $stmt->execute();
       $stmt->store_result();
       $stmt->bind_result($autor, $titulo, $anio, $editorial); 
 
       $xml = new DomDocument('1.0', 'UTF-8');
 
      $biblioteca = $xml->createElement('biblioteca');
      $biblioteca = $xml->appendChild($biblioteca);
 
      while($stmt->fetch()) {
    
        $libro = $xml->createElement('libro');
        $libro = $biblioteca->appendChild($libro);

        $nodo_autor = $xml->createElement('autor', $autor);
        $nodo_autor = $libro->appendChild($nodo_autor);
        $nodo_titulo = $xml->createElement('titulo', $titulo);
        $nodo_titulo = $libro->appendChild($nodo_titulo);
        $nodo_anio = $xml->createElement('anio', $anio);
        $nodo_anio = $libro->appendChild($nodo_anio);
        $nodo_editorial = $xml->createElement('editorial', $editorial);
        $nodo_editorial = $libro->appendChild($nodo_editorial);
       }
   
       $stmt->free();
       $bd->close();
   
      $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;
  }
?>
   Y listo, ya con esto tenemos un XML que se genera a partir de un contenido que podemos modificar dinámicamente desde cualquier otra aplicación o programa, que es la idea...!!!