Обновите значения столбцов в файле 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('<>&', '  ');
Другие вопросы по тегам