使用HTML::TreeBuilder更新HTML文件中的列值



我有一个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_namen";
$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列中的文本。

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('<>&', '  ');

相关内容

  • 没有找到相关文章

最新更新