2013-08-07 36 views
1

有没有简单的方法将HTML文件转换为Perl哈希?例如一个工作的Perl模块或东西?如何将HTML文件转换为Perl中的散列?

我是cpan.org搜索,但did'nt发现什么有什么可以做我想做的。我想要做这样的事情:

use Example::Module; 
my $hashref = Example::Module->new('/path/to/mydoc.html'); 

此我想引用第二div元素这样的事情后:

my $second_div = $hashref->{'body'}->{'div'}[1]; 
# or like this: 
my $second_div = $hashref->{'body'}->{'div'}->findByClass('.myclassname'); 
# or like this: 
my $second_div = $hashref->{'body'}->{'div'}->findById('#myid'); 

有没有什么有效的解决方案为这个?

回答

4

HTML::TreeBuilder::XPath为您提供比简单哈希更多的功能。

从简介:

use HTML::TreeBuilder::XPath; 
    my $tree = HTML::TreeBuilder::XPath->new; 
    $tree->parse_file("mypage.html"); 
my $nb=$tree->findvalue('/html/body//p[@class="section_title"]/span[@class="nb"]'); 
    my $id=$tree->findvalue('/html/body//p[@class="section_title"]/@id'); 
    my $p= $html->findnodes('//p[@id="toto"]')->[0]; 

    my $link_texts= $p->findvalue('./a'); # the texts of all a elements in $p 

    $tree->delete; # to avoid memory leaks, if you parse many HTML documents 

更多XPath

1

Mojo::DOMdocs found here)建立了一个简单的DOM,可以在一个CSS选择器样式访问:

# Find 
say $dom->at('#b')->text; 
say $dom->find('p')->pluck('text'); 
say $dom->find('[id]')->pluck(attr => 'id'); 

如果你使用XHTML,你也可以使用XML::Simple,产生类似的数据结构到你描述的那个。

+0

[Web :: Query](http://p3rl.org/Web::Query)支持更多。 – daxim

相关问题