Cargando



Construyendo documentos XML con PHP

En este tutorial veremos cómo podemos construir un documento XML utilizando el lenguaje de programación PHP, de esta forma podremos generar contenido que puede ser consumido por aplicaciones de otros lenguajes y plataformas de forma sencilla y estandarizada.


ene 12 2015 18:59
Profesional
ene 12 2015 21:11
Antes de sumergirnos en la parte técnica de cómo crear estos documentos, primero debemos entender que es un archivo XML, y cuáles son sus aplicaciones reales y actuales, de esta forma podremos apreciar mucho más los conocimientos que podemos adquirir en este apartado.

¿Qué es un archivo XML?
Seguramente muchos de ustedes ya sepan que es un archivo XML, sin embargo para aquellos que no lo saben o es primera vez que ven este término vamos a explicar un poco su concepto. XML es un lenguaje de etiquetas y marcado muy similar a HTML que nos permite organizar el contenido en un documento. Está compuesto por etiquetas y entidades, además que debemos seguir varias reglas al momento de generarlo.


Seguramente pensarán que estoy describiendo al HTML también, y el por qué no utilizamos este último en vez de crear un nuevo lenguaje, pues simplemente porque el XML es más estricto y es más personalizable, es por ello que es mucho más flexible de utilizar y más fácil de entender. Las etiquetas en HTML ya están definidas en su estándar, en cambio un XML las etiquetas las creamos nosotros bajo las reglas del lenguaje.

Aplicaciones del XML


Al inicio del tutorial mencionamos una de las aplicaciones más conocidas del XML y es organizar el contenido para que pueda ser consumido por las aplicaciones, esto es lo que básicamente se requiere. Al organizar un documento XML podemos hacer lo que se llamara un parse, que no es más que leer el archivo y si sigue el estándar podremos saber cuál es su estructura y con ello procesar dentro de nuestro programa dicho contenido.

En un contexto real, el XML puede servirnos para transmitir datos a través de un web service o para restaurar e importar datos en una Base de Datos. Como vemos es un formato de portabilidad, es decir, para llevar datos de una plataforma a otra. También sirve dentro de una misma plataforma, por ejemplo un archivo de configuración donde cada etiqueta corresponde a parámetros que nuestra aplicación lee para generar un comportamiento adecuado.

Actualidad


A pesar que en el último par de años el formato JSON ha ganado mucha popularidad en entornos web, y pudiera decirse que ha ido ganando popularidad sobre el XML, en realidad no es así ya que cada uno tiene su espacio, la ventaja del JSON es que es nativo en Javascript y con las nuevas formas de trabajo con este lenguaje la conversión es prácticamente innecesaria.

Sin embargo en otros ambientes como aplicaciones de escritorio, lenguajes de servidor diferentes a Javascript y aplicaciones que ya tienen bastante tiempo en el mercado, XML es una opción válida y muy utilizada.

Como siempre todo depende de nuestras necesidades, podemos decir que ni JSON ni XML son malos, simplemente cada uno tiene su ámbito y su propósito, por lo que si deseamos utilizar XML y alguien nos dice que estamos desactualizados, simplemente basta con saber que para nuestras necesidades es totalmente válido.

Estructura de un archivo XML


Como ya hemos explicado un archivo XML está compuesto por etiquetas, sin embargo para que pueda ser interpretado de forma correcta este debe tener un encabezado y luego empezar con el contenido. Al encabezado se le conoce como DTD o Document Type Definition, que podría traducirse como definición de tipo del documento y luego el contenido es el schema o esquema en castellano.

¿Qué hace el DTD?
El DTD es quien le va a dar la información al parser sobre qué tipo de XML es y dentro del schema es donde irá el contenido que hemos hecho para nuestro documento.


En la siguiente imagen veremos cómo luce un documento de prueba que tenemos en nuestro ambiente de desarrollo de aplicaciones:


construyendo-documentos-xml-con-php.jpg


Generar nuestro primer XML en PHP


Hemos notado que el XML no es más que texto, por lo que podemos hacer rutinas simples dentro de nuestra aplicación en PHP para generar el contenido correspondiente a un archivo XML, sin embargo si vemos bien la cabecera del archivo XML tiene las mismas etiquetas que las de apertura del lenguaje, es decir <? por lo que si hacemos un echo simple del contenido del XML vamos a obtener un error de sintaxis.

Esto lo podemos corregir de forma sencilla utilizando un header y cambiando el MIME Type por text/xml esto hará que el intérprete de PHP ya no considere como un error la cabecera de nuestro contenido XML que estamos generando. Veamos a continuación el código que vamos a utilizar para crear nuestro pequeño ejemplo:

<?php
header('Content-Type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
?>
<biblioteca>
			<?php

						 $libros = array(
	 array(
'titulo' => "Fight Club",
'autor' => "Chuck Palahniuk"

	 ),
	 array(
'titulo' => "World War Z",
'autor' => "Max Brooks",

	 )
	);

	 foreach($libros as $libro) {
	 echo "<libro>\n";
	 echo " <titulo>{$libro['titulo']}</titulo>\n";
	 echo " <autor>{$libro['autor']}</autor>\n";
	 echo "</libro>\n\n";
	}

			?>
</biblioteca>

Vemos acá como lo primero que hacemos es generar la cabecera del documento con el header, esto hará que podamos colocar la etiqueta de inicio de nuestro XML sin levantar errores de sintaxis en PHP, luego colocamos fuera del código nuestra etiqueta raíz del schema, en este caso biblioteca.

A continuación hacemos un pequeño array con varios elementos que hemos denominado libros, lo importante acá a pesar que es algo manual es que podemos ver que podríamos hacer esto con un resultado de Base de Datos por ejemplo. Finalmente, recorremos nuestro array e imprimimos, siempre respetando las etiquetas para que nuestro XML esté bien formado.

Al final cuando ejecutemos esto en nuestro servidor de pruebas obtendremos algo como lo siguiente en el navegador:



Mejorando el procesamiento
A pesar que lo anterior funciona bastante bien y es muy útil, es demasiado propenso a errores, por lo que para nuestra ayuda tenemos varias librerías que nos permiten crear documentos XML a partir de definiciones más comunes del lenguaje, para ello tenemos la librería DOM y la librería SimpleXML, ambas nos permiten generar documentos XML así como también hacer el parse de los mismos.


Hacer parse con DOM


En el siguiente ejemplo vamos a tomar un archivo XML que se encuentre en nuestro directorio, para facilitar las cosas podemos guardar el documento que se generó en el ejemplo anterior y lo llamaremos php_crear_xml.xml, teniendo en cuenta que al modificar la extensión ya no podremos usar PHP para imprimir la cabecera, una forma sencilla de ver el XML completo es presionar CTRL + u y tendremos el mismo. Una vez que ya tenemos nuestro archivo de pruebas, vamos a utilizar el siguiente código para hacer el parse del archivo.

<?php

$parser = new DOMDocument();
$parser->load("ejemplo1.xml");
procesar($parser->documentElement);
function procesar($nodo) {
foreach ($nodo->childNodes as $hijo) {
	if ($hijo->nodeType == XML_TEXT_NODE) {
	 echo "<p>".$hijo->nodeValue."</p>";
	}
	else if ($hijo->nodeType == XML_ELEMENT_NODE) {
	 procesar($hijo);
	}
}
}

?>

En el código vemos que hemos creado un objeto del tipo DOMDocument, esto nos traerá la librería DOM para poder interpretar el XML, luego con el método load() cargamos el archivo XML que tenemos en nuestra ruta y hacemos luego el llamado a la función procesar() esta es la que nos va a permitir recorrer el documento cargado.

Finalmente definimos nuestra función, aquí recorremos cada nodo y luego hacemos un condicional si es un elemento XML llamamos a la función, en caso contrario si es texto lo imprimimos, con ello podemos obtener el contenido del XML sin problemas.

El único defecto de este método y esta librería es la cantidad de memoria que se requiere en el servidor, por lo que si fuese un gran archivo XML sería muy difícil para nuestro servidor procesarlo.


construyendo-documentos-xml-con-php-3.jpg


Hacer parse con SimpleXML


Tenemos también la librería SimpleXML para poder crear y procesar los archivos XML, su uso es algo similar a la librería DOM, sin embargo es más limitada en cuanto a su aplicación y de mayor complejidad, aunque esta es un poco mayor, por lo que nuestro código puede que sea más complejo.

Lo interesante de esta librería es que se crea un objeto con nuestro XML con lo cual podemos acceder directamente a sus propiedades y de esta forma trabajar con ellas. Veamos en el siguiente código como podemos acceder a las etiquetas título de cada libro que tenemos en nuestro XML de pruebas.

<?php

$archivoXML = simplexml_load_file("ejemplo1.xml");
foreach ($archivoXML->libro as $libro) {
echo $libro->titulo . "</br>";
}

?>

Aunque el código pueda verse un poco corto, lo que hacemos es crear un objeto del archivo cargado y podemos recorrer con un foreach cada uno de los nodos del mismo y así acceder al contenido de su etiqueta de forma sencilla. Con lo cual obtendríamos lo siguiente en el navegador:


construyendo-documentos-xml-con-php-4.jpg


Con esto concluimos este tutorial, hemos creado exitosamente un archivo XML y hemos aprendido dos formas diferentes para poder leer estos archivos, es importante practicar con archivos más complejos para que estemos listos y poder aplicar nuestros conocimientos en una aplicación de la vida real.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X