-2

我正在使用 WWW::Mechanize 查询 Twitter API 并将(XML)结果存储到@content

现在我想在该内容中搜索用户 ID(我想要的数据总是存储在<id>...</id>标签之间)。以下正则表达式在下载的文件上完美运行:

for ( @content ) {
  if (m/<id>(\d+)<\/id>/) { 
    print "$1\n";
   }
}

但它不适@content用于我使用 Mechanize 创建的数组,因为它只会给我一个匹配项。

我尝试使用我在 StackOverflow 其他地方找到的方法之间的外观,但这似乎是一个红鲱鱼:

m/(?<=<id>)(\d{1,})(?=<\/id>)/g

我遗漏了一些东西,但是(多年来总是在 StackOverflow 或其他地方找到答案)我很难过。显然我什至不知道如何提出正确的问题。我错过了什么?这与 Mechanize 存储数组的方式有关吗?

4

3 回答 3

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');
于 2012-05-25T21:31:17.047 回答
0

对于 XML,您需要使用 XML 解析器。什么,如果你的 XML 是这样的?

<id param="test">
4
</id>

你需要转储你的@content 才能看到一切正确。

于 2012-05-25T19:30:57.127 回答
-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";
    }
}
于 2012-05-25T20:11:34.220 回答