En este artículo vamos a ver una manera muy sencilla de poder generar un XML desde PHP, lo cual nos dará mucha flexibilidad en nuestros desarrollos para cuando tengamos que hacer una exportación de datos por ejemplo.
Para ello utilizaremos unas clases que ya vienen por defecto en PHP que nos facilitaran mucho la tarea como veréis en breve.
Vamos a ver el código y luego lo explicamos.
$filenameXML = "mi_exportacion_en_xml.xml";
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?>');
for ($i = 1; $i <= 9; ++$i) {
$track = $xml->addChild('films');
$track->addChild('title', "Star Wars Episode $i ");
}
$xml->asXML($filenameXML);
Primero de todo hemos definido una variable "filenameXML" con el nombre que querremos que tenga nuestro fichero una vez generado. Aquí podremos poner el nombre y la ruta que deseemos.
El siguiente paso es el importante en la creación de nuestro fichero XML. Crearemos un objeto de la clase SimpleXMLElement. En este caso como parámetro del constructor le hemos puesto la etiqueta básica que queremos que tenga nuestro fichero. Aquí le hemos indicado el version y el encoding.
El siguiente paso es un for en el que, en este caso, introduciremos tags y valores ficticios, pero aquí es donde vosotros deberíais crear vuestro propio contenido.
Nuestro objeto creado "xml" tiene unas funciones que nos permiten crear hijos, es decir tags, dentro de nuestro XML. Como veis la función "addChild" acepta tanto uno como dos parámetros. El primero es el nombre del tag, y el segundo el valor. Si el segundo valor esta vacío, en nuestro fichero aparecerá el tag pero no tendrá valor. Y si sobre nuestro hijo, creamos otro hijo, como en el ejemplo, lo creará dentro.
Por último, creamos nuestro fichero físico a partir de la estructura que hemos creado.
Vamos a ver como quedaría nuestro fichero XML.
<?xml version="1.0" encoding="utf-8"?>
<films>
<title>Star Wars Episode 1 </title>
</films>
<films>
<title>Star Wars Episode 2 </title>
</films>
<films>
<title>Star Wars Episode 3 </title>
</films>
<films>
<title>Star Wars Episode 4 </title>
</films>
<films>
<title>Star Wars Episode 5 </title>
</films>
<films>
<title>Star Wars Episode 6 </title>
</films>
<films>
<title>Star Wars Episode 7 </title>
</films>
<films>
<title>Star Wars Episode 8 </title>
</films>
<films>
<title>Star Wars Episode 9 </title>
</films>
Esperamos que esta explicación os haya sido de utilidad.