3

我想从 html 文件中提取所有表格并以下列方式打印它们的内容,每个单元格由 分隔\t,每行由 分隔\n,每个表格由 分隔 \n\n。以下是我的脚本,当我将其更改为 tr 上的 findvalues 时,将整个 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);
4

1 回答 1

4

您需要分别处理每个表,行相同:

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、表内表等)

于 2013-08-06T13:52:20.867 回答