2010-10-20 6 views

Respuesta

14

No estoy seguro de que haya sido alguna vez la "biblioteca recomendada". Si sé qué tipo de feed necesito analizar, utilizo XML::RSS o XML::Atom según corresponda, pero si (como es más probable) solo sé que es un feed web, uso XML::Feed.

Adición de un ejemplo del uso de XML :: Alimentar a lo solicitado ..

use XML::Feed; 

my $feed = XML::Feed->parse(\$string_containing_feed); 

foreach ($feed->entries) { 
    print $_->title, "\n"; 
    print $_->content->body, "\n"; 
} 

Todo esto es más o menos copiado de la documentación del módulo.

+1

¿te importaría mostrar un fragmento para imprimir el título y el contenido de una entrada de blog con XML :: Feed? – xenoterracide

+0

Agregué un ejemplo a mi respuesta. –

5

Si XML :: RSS :: Parser funciona para usted, úselo. He usado XML :: Parser para tratar con RSS, pero tenía requisitos estrechos y XML :: Parser ya estaba instalado.

El hecho de que algo se haya actualizado en unos años no significa que ya no funcione; No creo que las diversas especificaciones de RSS/Atom hayan cambiado recientemente, así que no hay necesidad de que el analizador cambie.

5

En realidad, me gusta evitar los analizadores XML específicos de dominio en estos días y simplemente usar XPath para todo. De esa manera solo tengo que recordar una API. (A menos que sea una gran XML, a continuación, voy a utilizar un analizador basado en eventos como XML::Parser.)

Así, utilizando XML::XPath, puedo agarrar un montón de cosas a partir de un archivo RSS de esta manera:

my $rss = get_rss(); 
my $xp = XML::XPath->new(xml => $rss); 

my $stories = $xp->find('/rss/channel/item'); 

foreach my $story($stories->get_nodelist) { 
    my $url = $xp->find('link', $story)->string_value; 
    my $title = $xp->find('title', $story)->string_value; 
    ... 
} 

No es el código más bonito del mundo, pero funciona.

Cuestiones relacionadas