Mojo :: DOM - 如何返回多个属性

时间:2015-12-06 20:37:59

标签: perl mojolicious mojo-dom

我是Mojolicious的新手,要找到带有类Module的p标签内链接的标题,例如

<p class="Module"><a class="story" href="http://intranet/blah" >Link Text is here</a></p>

我使用以下代码:

my $dom = Mojo::DOM->new( $page );

for my $elm ( $dom->find('p.Module > a.story')->each ){
    print $elm->text ."\n";
}

非常粗糙,但功能齐全。我还不知道的是(对我来说可能为时已晚)是如何返回href和链接文本。请把我从痛苦中解脱出来。

2 个答案:

答案 0 :(得分:4)

您只需要attr方法:

my $dom = Mojo::DOM->new( $page );

for my $elm ( $dom->find('p.Module > a.story')->each ){
    print $elm->text, ' ', $elm->attr('href'), "\n";
}

有关Mojo::UserAgentMojo::DOM的快速教程,请查看Mojocast episode 5

答案 1 :(得分:2)

使用Mojo::Collection&#39; s map来做这件事的方式很好:

use v5.10;

use Mojo::DOM;
use Data::Dumper;

my $page =<<'HTML';
<p class="Module"><a class="story" href="http://intranet/blah" >Link Text is here</a></p>
HTML

my $dom = Mojo::DOM->new( $page );

my @links = $dom
    ->find('p.Module > a.story')
    ->map( sub { [ $_->text, $_->attr( 'href' ) ] } );

say Dumper \@links;