2010-10-20 11 views

risposta

14

Non sono sicuro che sia mai stata la "libreria consigliata". Se so quale tipo di feed devo analizzare, io uso XML::RSS o XML::Atom come appropriato, ma se (come è più probabile) so solo che si tratta di un feed Web, io uso XML::Feed.

Aggiunta di un esempio di utilizzo di XML :: feed come richiesto ..

use XML::Feed; 

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

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

Questo è tutto praticamente copiato dalla documentazione del modulo.

+1

ti dispiacerebbe mostrare uno snippet per stampare il titolo e il contenuto di un post di blog con XML :: Feed? – xenoterracide

+0

Aggiunto un esempio alla mia risposta. –

5

Se XML :: RSS :: Parser funziona per te, quindi utilizzarlo. Ho usato XML :: Parser per gestire gli RSS ma avevo requisiti ristretti e XML :: Parser era già installato.

Solo perché qualcosa è stato aggiornato in pochi anni non significa che non funzioni più; Non penso che le varie specifiche RSS/Atom siano cambiate di recente, quindi non c'è bisogno che il parser cambi.

5

In realtà oggi mi piace evitare i parser XML specifici del dominio e utilizzare XPath per tutto. In questo modo devo solo ricordare una API. (A meno che non si tratta di un enorme XML, quindi userò un parser basato su eventi come XML::Parser.)

Quindi, utilizzando XML::XPath, posso prendere un mucchio di roba da un file RSS in questo modo:

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; 
    ... 
} 

Non è il codice più carino del mondo, ma funziona.

Problemi correlati