2013-08-06 75 views
3

我想從html文件中提取所有表格,並按以下方式打印其各個單元格,每個單元格由\t分隔,每行用\n分隔,每個表格用\n\n 。以下是我的腳本,當我將它改爲在tr上查找值時,整個tr作爲一個元素插入,我甚至嘗試了其他方法,如findnodes_as_strings($ path),我想將其修改爲上述結構。使用Html :: TreeBuilder :: XPath打印表格內容

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); 
+0

有沒有原因您不使用[HTML :: TableExtract](http://blog.nu42.com/2012/04/htmltableextract-is-beautiful.html)? –

回答

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"; 
} 

當然這只是針對簡單的表格溶液(想想columnspans,日,表內表等)

+1

非常感謝,正是我期望的。 –