xmlDe un tiempo a esta parte me dedico básicamente a hacer funciones que faciliten la utilización de los datos de cualquier cosa. Para esto lo mejor según mi experiencia es utilizar array. En php los array son fáciles de implementar, sobre todo para hacer operaciones con muchos datos a la vez, como listas de números, direcciones o lo que sea.
Vista esta necesidad me puse a buscar una función que me pasara competentemente un archivo XML a Array, y encontré que el php tiene una implementada, pero esta implementada desde php5 asi que hasta que los señores de aruba no quieran dar soporte para php5 (dado que php4 ha dejado de tener soporte por parte de sus creadores) me toca sacarme las funciones a maña como siempre. Y aquí­ os dejo la de hoy.

Es una de las funciones mas simples que existen. Solo tiene 2 parámetros, $url que será la dirección donde se encuentre el archivo XML a leer y $full que indicará si queremos obtener los datos adicionales.
Si ponemos cualquier string (un contenido entre comillas) en $full en nuestro array no aparecerán datos como la linea en la que aparece el elemento representado, su orden en la jerarquí­a o el tag en el que estaba encerrado el dato entre otros.
Por defecto esta opción está activada, de manera que nos ofrezca el mayor numero de datos posible.

la función es:

PHP:
  1. function xml2array($url, $full=""){
  2.     $simple = @file_get_contents($url);
  3.     $p = xml_parser_create();
  4.     xml_parse_into_struct($p, $simple, $vals, $index);
  5.     xml_parser_free($p);
  6.     //ordenado de las variables
  7.     foreach($index as $key=>$value){
  8.         foreach($value as $key1=>$value1){
  9.             if($full == ""){
  10.                 $out[$key][$key1]["line"] = $value1;
  11.             }
  12.             foreach($vals[$value1] as $key2=>$value2){
  13.                 if($key2 == "attributes"){
  14.                     if($full == ""){
  15.                         $out[$key][$key1] = array_merge($out[$key][$key1], $value2);
  16.                     } else {
  17.                         $out[$key][$key1] = $value2;
  18.                     }
  19.                 } else {
  20.                     if($full == ""){
  21.                         $out[$key][$key1][$key2] = $value2;
  22.                     }
  23.                 }
  24.             }
  25.         }
  26.     }
  27.     //fin ordenado de las variables
  28.     return $out;
  29. }

Hoy en dí­a muchos de los servicios online ofrecen contenidos XML para revisar los datos... sin ir mas lejos este blog ofrece en XML a través del RSS los post del blog. Pero otros muchos como flickr, gmail.. nos dan soporte para obtener información.

Para la siguiente demostración vamos a ver los datos del RSS de este blog en el array de una forma muy simple:

PHP:
  1. $url = "http://www.tierra0.com/feed/";
  2. $resultado = xml2array($url);
  3. print_r($resultado);

Si por ejemplo queremos poner las fotos publicadas en nuestra cuenta de flickr solo tenemos que sacar la dirección del feed de abajo a la izq de nuestra galerí­a y pegarla en la dirección de url como en el siguiente ejemplo y directamente nos creará una mini-galerí­a con imágenes, links y comentario de cada imagen:

PHP:
  1. $url = "http://api.flickr.com/services/feeds/photos_public.gne?id=40962351@N00&lang=en-us&format=rss_200";
  2. $resultado = xml2array($url);
  3. foreach($resultado["DESCRIPTION"] as $value){
  4.     echo $value["value"];
  5. }

Otro ejemplo de galerí­a con los datos ofrecidos por flickr:

PHP:
  1. $url = "http://api.flickr.com/services/feeds/photos_public.gne?id=40962351@N00&lang=en-us&format=rss_200";
  2. $resultado = xml2array($url);
  3. foreach($resultado["MEDIA:CONTENT"] as $key=>$value){
  4.     echo "<img SRC=\"".$value["URL"]."\">";
  5. }

La aplicación que le estoy intentando dar yo es para reescribir un poco de la API del sistema de almacenamiento de imágenes Riya, el cual posee reconocimiento facial con OCR y viene genial a la hora de hacer búsquedas de fotografí­as automáticamente.

Actualización: Esta es una función con errores. Para mejorar su funcionamiento y agregarle mayor versatilidad se ha creado la versión 2.0
Para mas información de su funcionamiento y empleo entrad en lector y escritor de archivos XML versión2.0.

Actualización: Nueva version de esta Función. Version de XML() 2.5