2011-07-24 62 views
0

我有如下表:提取HTML表格用Perl

<table cellpadding="4" cellspacing="0" border="0"> 
     <tr> 
      <td> 
       <span class="label">Label1< /pan> 
      </td> 
      <td> 
       label1_value1 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <span class="label">Label2</span> 
      </td> 
      <td> 
          Label2_value1 <br/> 
          Label2_value2 <br/> 

      </td> 
     </tr> 

     <tr valign="top"> 
      <td> 
       <span class="label">Label3</span> 
      </td> 
      <td> 

       Result 1<br/> 

       Result 2<br/> 
       <span class="related"> - 
                Result 1 SP2<br/> </span> 
      </td> 
     <\tr> 
</table> 

我想使用HTML :: TableExtract为了提取该表

我用下面的代码,以提取表:

$te->parse($table_content); 
foreach my $row ($te->rows) { 
    if (defined($row->[1])) { 
     $row->[1]=~s/^\s+//gm; 
     $row->[1]=~s/\s+$/;/gm; 
     print $row->[1],"\n"; 
    } 
} 

我想在这个格式结果:

label1_value1,label1_value1;label1_value2,result1;result2-result3 

,但我得到错误的结果可能会有人帮什么我的代码,或者如果它possilbe问题解析与HTML跨度:: TableExtract

我得到如下: label1_value1 Label2_value1 Label2_value2;

RESULT1

RESULT2

-

reuslt1;

+0

**你得到了什么**结果? – duskwuff

+0

您应该修复表格的第四行:' Label1 < /pan>'最后应该有''。 –

回答

6

首先,您的HTML中存在一些错误,如</pan><\tr>以及未封闭的span标记。一旦这些都是固定的,代码

#!/usr/bin/env perl 

use warnings; use strict; 
use HTML::TableExtract; 

my $te = HTML::TableExtract->new(
    attribs => { 
     cellpadding => '4', cellspacing => '0', border => '0' 
    } 
); 

my ($table) = $te->parse(do { local $/; <DATA>}); 
for my $row ($table->rows) { 
    for my $cell (@$row) { 
     $cell =~ s/^\s+//; 
     $cell =~ s/\s+\z/;/; 
     $cell =~ s/\s+/ /g; 
    } 
    print join("|", @$row), "\n"; 
} 

会给你:

Label1;|label1_value1; 
Label2;|Label2_value1 Label2_value2; 
Label3;|Result 1 Result 2 - Result 1 SP2;

现在,我不知道是什么逻辑将从导致所需的输出:

label1_value1,label1_value1;label1_value2,result1;result2-result3

你能否提供更多关于你想要做什么的信息?