Печать содержимого таблицы с использованием Html::TreeBuilder::XPath

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

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);

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам