casimo has asked for the wisdom of the Perl Monks concerning the following question:

I'm looking to use XML::Atom to parse a feedburner feed.

I am using a modified version of this:
http://www.perlmonks.org/?node_id=755815

It works fine except on XML elements that contain a colon such as <im:name>

Here is my code:

use XML::Atom::Feed; use XML::Atom::Entry; my $xml_url = 'http://ax.itunes.apple.com/WebObjects/MZStoreServices.w +oa/ws/RSS/topsongs/sf=143441/limit=100/explicit=true/xml'; my $feed = XML::Atom::Feed->new($xml_url); $test = "im:name"; foreach my $entry ($feed->entries()) { my $title = $entry->title(); my $name = $entry->$test(); print "$title $name\n"; }

Replies are listed 'Best First'.
Re: XML::Atom with Feedburner
by ikegami (Patriarch) on Jun 20, 2009 at 23:43 UTC

    XML::Atom::Entry objects don't have a method named im:name. In fact, it's even a valid Perl subroutine name. To get arbitrary XML elements, you need to use get and set.

    But first, you need to know the namespace to which the element (name) belongs. It's not "im". That's just an arbitrary identifier. It's the uri to which it is associated that matters. Looking at the feed, we see it's http://itunes.apple.com/rss.

    Now that you have the element name and the name of the namespace in which the element belongs, you can use get and set.

    my $itunes_ns = XML::Atom::Namespace->new( itunes => 'http://itunes.apple.com/rss' ); my $name = $entry->get($itunes_ns, 'name');

    I used the more meaningful "itunes" over "im". Like I said, the identifier itself is meaningless.

      ikegami, thanks for the code and the explanation of XML namespaces.
      Both are very helpful.