Обновите значения столбцов в файле HTML, используя HTML::TreeBuilder
У меня есть HTML-файл с несколькими таблицами (все таблицы имеют одинаковое количество столбцов и одинаковые имена столбцов). Таблицы разделены другими тегами HTML.
Для каждой строки в каждой таблице я хотел бы изменить значение ячейки 1 и 3.
Это то, что у меня есть (спасибо @depesz):
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use open qw( :std :utf8 );
use HTML::TreeBuilder;
my $input_file_name = shift;
my $tree = HTML::TreeBuilder->new();
$tree->parse_file( $input_file_name ) or die "Cannot open or parse $input_file_name\n";
$tree->elementify();
my @tables = $tree->find_by_tag_name( 'table' );
for my $table (@tables) {
foreach my $row ($table->find_by_tag_name('tr')) {
foreach my $column ($table->find_by_tag_name('td')) {
# how do I change the text of first and 3rd column text to "removed"
}
}
}
print $tree->as_HTML();
exit;
Он отлично работает для перебора всех строк в файле HTML. Я просто не уверен, как сделать последние изменения текста в столбцах 1 и 3.
1 ответ
Решение
HTML::TreeBuilder::XPath
Модуль обеспечивает гораздо более удобный доступ к узлам HTML в документе.
Взгляните на эту программу, например. Кажется, делать то, что вам нужно.
use strict;
use warnings;
use HTML::TreeBuilder::XPath;
my $tree = HTML::TreeBuilder::XPath->new_from_file('anon.html');
for my $table ($tree->findnodes('//table')) {
my $row = 0;
for my $tr ($table->findnodes('//tr')) {
$row++;
for my $td ($tr->findnodes('td[position() = 1 or position() = 3]')) {
$td->delete_content;
$td->push_content("name$row");
}
}
}
print $tree->as_HTML('<>&', ' ');