How can I extract some XML data from a URL using X

2019-06-26 08:20发布

问题:

I want to get a specific string, for example 123 in <received>123</received> from some XML that will be retrieved from a URL.

I have write a code but stuck with an error message:

Attempt to bless into a reference at /usr/share/perl5/XML/Twig.pm line 392.

How can I solve it?

The code:

use XML::Twig;
use LWP::Simple;

my $url = 'http://192.168.1.205:13000/status.xml';
my $twig = new XML::Twig(TwigRoots => {
'smsc/received' => sub {$author = $_[1]->text;  }});
$twig->nparse( $url );
$twig->print;

回答1:

nparse takes care of the new for you (hence the 'n'), what you want in this case is probably xparse, or just let the module figure it out and do this:

my $url= 'http://192.168.1.205:13000/status.xml';
my $twig= XML::Twig->parse( twig_roots => 
                              { 'smsc/received' => sub { $author= $_[1]->text;}},
                             $url
                           );
$twig->print; # I am not sure why you print the twig instead of just $author


回答2:

Appears to be a bug in nparse method because if you replace that line with:

$twig->parse( LWP::Simple::get($url) );

Then you should find it works fine (or it does when I try it).

/I3az/