Xml Can';t调用方法";rs“U名称空间”uri“;在GetRss.pl第25行的未定义值上

Xml Can';t调用方法";rs“U名称空间”uri“;在GetRss.pl第25行的未定义值上,xml,perl,rss,lwp-useragent,Xml,Perl,Rss,Lwp Useragent,我正在努力从在线新闻报纸的RSS提要中获取特殊术语。我正在使用带有LWP::UserAgent的XML::RSS::解析器进行URL下载。我无法让它工作,即使我实际使用了来自cpan的复制粘贴:$feed-%3Erss\u namespace\u uri。我总是会遇到同样的错误:“无法在GetRss.pl第25行的未定义值上调用方法“rss_namespace_uri”。我什么都试过了。。。我在LWP::Simple和XML::RSS::Parser中也遇到了同样的问题,我使用FileHandl

我正在努力从在线新闻报纸的RSS提要中获取特殊术语。我正在使用带有LWP::UserAgent的XML::RSS::解析器进行URL下载。我无法让它工作,即使我实际使用了来自cpan的复制粘贴:$feed-%3Erss\u namespace\u uri。我总是会遇到同样的错误:“无法在GetRss.pl第25行的未定义值上调用方法“rss_namespace_uri”。我什么都试过了。。。我在LWP::Simple和XML::RSS::Parser中也遇到了同样的问题,我使用FileHandle进行了管理,但我知道我希望从多个站点获取提要,并保存在一个数组中。 这是我的代码:

#!/usr/bin/perl -w

use strict;
use XML::RSS::Parser;
use URI;
use LWP::UserAgent;
use Data::Dumper;

my $ua = LWP::UserAgent->new;
$ua->agent('XML::RSS::Parser Test Script');
my @places=( 'http://www.timaoutloud.org/xml/index.rdf' );

my $p = new XML::RSS::Parser;

foreach my $place ( @places ) {

         # retreive feed
        my $url=URI->new($place);
        my $req=HTTP::Request->new;
        $req->method('GET');
        $req->uri($url);
        my $feed = $p->parse($ua->request($req)->content);

        # output some values
        my $title = XML::RSS::Parser->ns_qualify('title',$feed->rss_namespace_uri);
        print $feed->channel->type.": ".$feed->channel->element($title)->value."\n";
        print "item count: ".$feed->item_count()."\n";
        foreach my $i ( @{ $feed->items } ) {
                foreach ( keys %{ $i->element } ) {
                        print $_.": ".$i->element($_)->value."\n";
                        }
                        print "\n";
                }
                # data dump of the feed to screen.
                my $d = Data::Dumper->new([ $feed ]);
                print $d->Dump."\n\n";
        }

谢谢

当您访问internet上的资源时,总是有可能访问失败。执行错误管理:

my $response = $ua->get('http://search.cpan.org/');

if ($response->is_success) {
  print $response->decoded_content;  # or whatever
} else {
  die $response->status_line;
}
-从地下室偷来的

注意使用
解码内容
,这样更好。另外,请注意,对于简单的
GET
,没有手动生成请求。您需要用解析代码替换
打印

当我试图使用浏览器访问您提供的URL时,我超时了

您还可以查看
$p->parse
返回的内容实际上是否正常:

die "Couldn't parse feed" unless $feed;

另外,
使用警告

非常感谢。。。它工作!!!我对perl比较陌生,所以这类问题对我来说非常困难。