Удалить всю строку из таблицы с помощью HTML :: TableExtract - PullRequest
1 голос
/ 09 июня 2011

Есть ли способ удалить всю строку (html-теги и все) из таблицы HTML с помощью HTML::TableExtract?

Перебираться с примером кода из CPAN, это то, что я пробовалпока что:

use HTML::TableExtract qw(tree);

my $te = HTML::TableExtract->new( headers => [qw(name type members)] );

# get $html_string out of a file...

$te->parse($html_string);

my $table = $te->first_table_found();
my $table_tree = $table->tree;
$table_tree->row(4)->replace_content('');
my $document_tree = $te->tree;
my $document_html = $document_tree->as_HTML;

# write $document_html to a file ...

Теперь, как следует из названия, метод replace_content () в строке $table_tree->row(4)->replace_content(''); удаляет content строки 4, но сама строка остается в разметке,Мне нужно убрать теги и все промежуточное.

Есть идеи?

1 Ответ

3 голосов
/ 09 июня 2011

То, что вы хотите, это parent и delete методы

См. Документы для HTML :: Element и для HTML :: Element :: delete

ОБНОВЛЕНИЕ

Хорошо, нажмите на эту галочку и отметьте ее как отвеченную .... Вот она:

my($p) = $table_tree->row(4)->parent();
$p->delete;

Также, ПРИМЕЧАНИЕ , вам нужно () около $ p! Если у вас нет паренов, не возвращайте ссылку.

Для меня, с приведенным выше кодом Perl, работающим над этим HTML,

<table>
   <tr><td>name</td><td>type</td><td>members</td></tr>
   <tr><td>row1</td><td>row1</td> <td>row1</td></tr>
   <tr><td>row2</td><td>row2</td> <td>row2</td></tr>
   <tr><td>row3</td><td>row3</td> <td>row3</td></tr>
   <tr><td>row4</td><td>row4</td> <td>row4</td></tr>
</table>

Я получаю это в результате печати $document_html

<table>
   <tr><td>name</td><td>type</td><td>members</td></tr>
   <tr><td>row1</td><td>row1</td><td>row1</td></tr>
   <tr><td>row2</td><td>row2</td><td>row2</td></tr>
   <tr><td>row3</td><td>row3</td><td>row3</td></tr>
</table>

Обратите внимание, что нет пустых <tr></tr>

...