2011-10-30 149 views
1

我正在Perl中构建HTML解析器。我想知道HTML元素是否是没有任何修改的元素。如何检查HTML元素是否是一个结束节点?

这里是HTML,我想解析:

<span class="bold1">A:</span> ELementA<br /> 
<span class="bold1">B:</span> <a href="mailto:admin" class="bold1">mailto:admin</a><br /> 
<span class="bold1">C </span> 01/12<br /> 
<span class="bold1">D:</span> ELementC<br /> 
<span class="bold1">E:</span> ElementD<br /> 
<span class="bold1">F:</span> ElementE<br /> 

如何检查元素是结束元素。

我收到错误:

Can't call method "as_text" without a package or object reference at 

任何想法可能是错误的?

这里是Perl代码片段,

my $mech = WWW::Mechanize->new(autocheck => 1); 

eval 
{ 
    $mech->get($url); 
}; 
if ([email protected]) 
{ 
    print "Error connecting to URL $url \n"; 
    exit(0); 
} 

my $root = HTML::TreeBuilder->new_from_content(decode_utf8($mech->content)); 

my @PageSections = $root->look_down( 
      sub { 
       return (
       ($_[0]->tag() eq 'span') and 
       ($_[0]->attr('class') =~ m/bold1/i)) 

      }); 

my $temp2; 
my $temp3; 

for my $ps (@PageSections) 
{ 
    # my $temp1= $ps->right()->as_text; 
    $temp2= $ps->as_text; 

    my $temp3=ref $ps->right(); 
    # 
    print defined $temp3 ? "defined \n" : "not defined\n"; 
} 

感谢

+0

你使用的是[HTML-Tree](http://search.cpan.org/dist/HTML-Tree/)吗? – cjm

+0

不,我正在使用HTML :: Treebuilder – Kiran

+2

[HTML :: TreeBuilder](http://search.cpan.org/perldoc?HTML::TreeBuilder)是[HTML-Tree](http:// search .cpan.org/dist/HTML-Tree /)分发(就像你已经看到你是否点击链接一样),所以你使用HTML-Tree。 (另外,Perl是区分大小写的,所以它是HTML :: TreeBuilder,而不是HTML :: Treebuilder。) – cjm

回答

1

这很难说,不知道更多你的代码,但我猜@PageSections包含了一些自家酿制的模块的对象,那里发生的事情使$ _指向完全不同的东西。我会去

for my $ps (@PageSections) 
{ 
    my $temp1= $ps->right()->as_text; 
    my $temp2= $ps->as_text; 
    print "$temp2 " . $temp1 . " \n"; 
} 

改为。

+0

这实际上并没有帮助,我已经将Pagesection定义为如下所示:my @PageSections = $ root-> look_down(' class'=> qr/bold1 $ /); – Kiran

+0

我刚刚搜索了你正在使用的方法,而且好像你在使用HTML :: TreeBuilder?把它包括在你的问题中不会有什么坏处。它也没有说错误发生在哪里。我会猜测它在'my $ temp1 = $ ps-> right() - > as_text;'上失败,因为right()返回undef。试着写'my $ temp0 = $ ps-> right();打印已定义的$ temp0? “已定义\ n”:“未定义\ n”; ' – flesk

+0

是的,我使用HTML :: Treebuilder,我不是专家,我会在检查你的建议后立即打印。 – Kiran

相关问题