使用Html::TreeBuilder::XPath打印表内容



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

您需要分别处理每个表,对于行也是如此:

foreach my $table ( $tree->findnodes('//table') ) {
    foreach my $row ( $table->findnodes('.//tr') ) {
        my @cells = $row->findvalues('.//td');
        print join("t", @cells), "n";
    }
    print "n";
}

当然,这只是简单表的解决方案(想想columnspan、th、表内表等)

最新更新