 |
Recorrer archivo XML, para lector RSS usando la extensión SimpleXML |
|
|
|
|
|
La extensión SimpleXML ofrece un conjunto de herramientas simples y fáciles de usar para convertir un XML en un objeto que puede ser procesado con selectores de propiedades e iteradores de matrices y nos permite leer e interpretar un archivo XML.
$url = 'rss.xml'; if (file_exists($url)) { $noticias = simplexml_load_file($url); if($url) { foreach ($noticias->item as $noticia) { echo "".$noticia->title." ".$noticia->description; } } else echo "Sintaxi XML inválida"; } else echo "Error al abrir ".$url; ?>
El archivo a tratar es el que indicará la variable $url, también puede ser una ruta absoluta a un archivo por ejemplo http://www.nociondigital.com/rss.php, si el archivo existe y su sintaxi XML es correcta pasa a procesarse.
Con un foreach se recorre todo el archivo, saltando de item a item, y extraiendo la información.
En el siguinete ejemplo, se hace un comprobación del formato del archivo XML, se mira si el formato es del tipo Noticias->channel->item (como el http://www.nociondigital.com/rss.php) o Noticias->item (como este http://www.nociondigital.com/rss/) y se procesa segun sea su formato.
$url="http://www.xlwebmasters.com/rss.php"; $Noticias = simplexml_load_file($url); if (!count((array)$Noticias->item)) //Si es 0 quiere decir que existe la etiqueta channel { foreach($Noticias->channel->item as $Noticia) { echo utf8_decode($Noticia->title); } } else { foreach($Noticias->item as $Noticia) { echo utf8_decode($Noticia->title); } } ?>
En este ejemplo se sigue haciendo la comprobación del formato y ademas si se le pone un valor a la variable $num_noticies se leeran los items hasta llegar a este valor o hasta el final del archivo. Sirve para presentar un número determinado de items.
$url="http://www.xlwebmasters.com/rss.php"; $num_noticies=5;
$Noticias = simplexml_load_file($url); if (!count((array)$Noticias->item)) { for ($i=0; $Noticias->channel->item[$i]->title!="" AND $i<$num_noticies; $i++) { echo utf8_decode($Noticias->channel->item[$i]->title)'; } } else { for ($i=0; $Noticias->channel->item[$i]->title!="" AND $i<$num_noticies; $i++) { echo utf8_decode($Noticias->item[$i]->title); } } ?>
|
|
|
|
|
|
|