我使用WWW :: Mechanize查询Twitter API并将(XML)结果存储到@content
现在我想在该内容中搜索用户ID(我想要的数据总是存储在<id>...</id>
标签之间)。以下正则表达式适用于下载的文件:
for ( @content ) {
if (m/<id>(\d+)<\/id>/) {
print "$1\n";
}
}
但它不会对我使用Mechanize创建的@content
数组起作用,只会给我一个匹配。
我尝试使用我发现elsewhere on StackOverflow的方法之间的外观,但这似乎是一个红色的鲱鱼:
m/(?<=<id>)(\d{1,})(?=<\/id>)/g
我错过了一些东西,但是(多年来总是在StackOverflow或其他地方找到答案)我很难过。很明显,我甚至不知道如何提出正确的问题。我错过了什么?它与Mechanize存储数组的方式有关吗?
答案 0 :(得分:3)
use 5.010;
use strictures;
use WWW::Mechanize qw();
use XML::LibXML qw();
my $mech = WWW::Mechanize->new;
$mech->get('http://api.twitter.com/1/followers/ids/twitter.xml');
my $dom = XML::LibXML->load_xml(string => $mech->content);
# or skip the middle-man:
# my $dom = XML::LibXML->load_xml(location => 'http://api.twitter.com/1/followers/ids/twitter.xml');
say $_->textContent for $dom->findnodes('//id');
答案 1 :(得分:0)
对于XML,您需要使用XML解析器。什么,如果您的XML将是这样的?
<id param="test">
4
</id>
你需要转储你的@content以确保一切正确。
答案 2 :(得分:-1)
试试这个:
use strict;
use warnings;
use WWW::Mechanize;
use Data::Dumper;
my $mech = WWW::Mechanize->new();
my $url = "http://api.twitter.com/1/followers/ids/twitter.xml";
$mech->get( $url );
# $mech->content is string
#print Dumper ($mech->content);
my @data = split /\n/ , $mech->content;
foreach (@data)
{
# $VAR4987 = '<id>340750222</id>';
if (/<id>(\d+)<\/id>/)
{
print $1; print "\n";
}
}