[room] Perl & parsers & вложенные одинаковые теги
Di
denyago на rambler.ru
Сб Янв 23 23:28:38 UTC 2010
Доброго времени суток!
Пробую из страницы вот такого типа: <div class=view_text><div
class=no_need>NOT NEEDED</div>NEED THIS</div> вытащить текст. Должно
получится NOT NEEDEDNEED THIS . В любом случае получается NOT NEEDED
Где я не прав?
Искал "perl parse nested tags", но ничего полезного не нашел...
Скрипт 1:
---------------------------------------------------------------------
#!/usr/bin/perl -w
use HTML::Parser ();
sub start_handler
{
my $tagname = shift; my $self = shift; my $att = shift;
if ($att->{'class'}){
if ($tagname eq "div" && $att->{'class'} eq "view_text") {
$self->handler(text => sub { print shift }, "dtext");
$self->handler(end => \&stop_handler,"tagname,self,attr");
}
}
}
sub stop_handler
{
my $tagname = shift;
my $self = shift;
my $att = shift;
if ($tagname eq "div"){
$self->eof;
}
}
my $p = HTML::Parser->new();
$p->handler( start => \&start_handler, "tagname,self,attr");
$p->parse_file(shift || die) || die $!;
print "\n";
---------------------------------------------------------------------
Скрипт 2:
---------------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
use HTML::TokeParser;
my $p = HTML::TokeParser -> new(shift || die) || die $!;
while (my $token = $p -> get_tag('div')) {
my $class = $token -> [1]{class} || '';
if ($class eq 'view_text') {
my $text = $p -> get_trimmed_text("/div");
print $text;
}
}
print "\n";
---------------------------------------------------------------------
Скрипт 3 (тут вроде что-то как надо (->dump), сам текст не выводится)
---------------------------------------------------------------------
#!/usr/bin/perl -w
use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new; # empty tree
my $test = HTML::TreeBuilder->new; # empty tree
$tree->parse_file(shift || die);
$test = $tree;
$test = $test->find_by_attribute('class','view_text');
$test->dump;
$test->as_HTML;
$test->as_text;
$test->as_XML;
$tree->dump;
$tree->as_HTML;
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : denyago.vcf
Тип : text/x-vcard
Размер : 366 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/smoke-room/attachments/20100124/4fa4444f/attachment.vcf>
Подробная информация о списке рассылки smoke-room