2013-08-06 2 views
3

Я хочу извлечь все таблицы из html-файла и распечатать их содержимое следующим образом: каждая ячейка разделяется \t, каждая строка разделяется \n, а каждая таблица разделяется \n\n , Следующим является мой скрипт, когда я изменил его на findvalues ​​на tr, тогда весь tr вставляется как один элемент, и я даже пробовал другие методы, такие как findnodes_as_strings ($ path), я хочу изменить его на вышеупомянутую структуру.Печать содержимого таблицы с использованием Html :: TreeBuilder :: XPath

use strict; 
use warnings; 
use HTML::TreeBuilder::XPath; 

my $tree= HTML::TreeBuilder::XPath->new; 
$tree->parse_file("html.html"); 

my @values=$tree->findvalues(q{//table//tr//td}); 

print $_, "\n" foreach(@values); 
+0

Есть ли причина, по которой вы не используете [HTML :: TableExtract] (http://blog.nu42.com/2012/04/htmltableextract-is-beautiful.html)? –

ответ

4

Вы должны обработать каждую таблицу отдельно, так же для строк:

foreach my $table ($tree->findnodes('//table')) { 

    foreach my $row ($table->findnodes('.//tr')) { 

     my @cells = $row->findvalues('.//td'); 
     print join("\t", @cells), "\n"; 
    } 
    print "\n"; 
} 

Конечно, это решение только для простых таблиц (думать о columnspans, тыс, таблицы внутри таблицы и т.д.)

+1

Большое спасибо, это именно то, что я ожидал. –

Смежные вопросы