in reply to Re^4: How do I capture XML into a variable?
in thread How do I capture XML into a variable?

First off, try using <code> tags for your code.

Second, when dealing with XML, it's highly recommended to use an XML parser of some sort. My favourite is XML::Twig, but others exist. There probably is even a wrapper around the XML parsers that help parse RSS feeds. Once you've retrieved the data into your $scalar, you can put it into these parsers and be able to get the data you want much more easily.

#!/usr/bin/perl -w use LWP::Simple; use XML::Twig; my $twig = XML::Twig->new(); $twig->parse(get 'http://www.frequencyyouth.blogspot.com/atom.xml'); my @entries = $twig->get_xpath('entry'); foreach my $entry (@entries) { my @title = $entry->get_xpath('title'); print "Found ", $_->text(), "\n" for @title; my @content = $entry->get_xpath('content'); print " -> ", $_->text(), "\n" for @content; }

Replies are listed 'Best First'.
Re^6: How do I capture XML into a variable?
by mirod (Canon) on Apr 19, 2005 at 08:20 UTC

    I guess it's time for the "obscure XML::Twig method of the day" link: you can also use the parseurlmethod to get the data directly.

    This would do the same thing your code does:

    #!/usr/bin/perl -w use strict; use XML::Twig; # to get the entries use YAML; # to dump the data # $entries is a reference to an array of entries # each entry contains { title => <title_text>, content => <content_tex +t> } my $entries=[]; my $twig = XML::Twig->new( twig_handlers => { entry => sub { store_ent +ry( $entries, @_); } } ) ->parseurl( "http://www.frequencyyouth.blogspot.co +m/atom.xml"); print Dump( $entries); exit; sub store_entry { my( $entries, $twig, $entry)= @_; push @$entries, { title => $entry->field( 'title'), content => $en +try->first_child( 'content')->xml_string }; }