2012-08-02 80 views
0

我使用HTML::Query从每个td标签中提取内容。我确实希望它以html格式。现在,当我印刷它时,大部分时间它似乎都要打印两次。有什么想法这里发生了什么? 这里是我使用的代码:将表中的内容与Perl匹配

for my $td ($doc->query("td")) { 
$td= $td->as_HTML; 
    given($td){ 
    when (/class=\"class1\">(.*?)<\/td>/){ 
      my $output = $1; 
    print "$output\n"; 
    } 

    when (/class=\"class2\">(.*?)<\/td>/){ 
      my $output = $1; 
    print "$output\n"; 
    } 
    when (/class=\"class3\">(.*?)<\/td>/){ 
      my $output = $1; 
    print "$output\n"; 
    } 
    when (/class=\"class4\">(.*?)<\/td>/){ 
      my $output = $1; 
    print "$output\n"; 
    } 
    } 


Input: 
<table> 
<tr> 
    <td class="class1">question</td> 
    <td class="class2">No response</td> 
</tr> 

<tr> 
    <td class="class1">question</td> 
    <td class="class2">No response</td> 
</tr> 

<tr> 
    <td class="class3">Answer</td> 
    <td class="class4">Answer is available</td> 
</tr> 
</table> 

回答

1

query回报所有<td>元素调用;有两个class="class1",所以这就是为什么该案件匹配两次。

由于您已经询问有关在单行上打印每个的内容,请尝试以下操作。请注意,我正在使用HTML::Element中的某些方法,而不是尝试匹配原始HTML代码。

for my $tr ($doc->query("tr")) { 
    my ($td1, $td2) = $tr->contents_list(); 
    # Print contents of $td1 and $td2 on the same line 
} 
+0

谢谢。我如何让它显示一次像这样的东西:问题没有回应问题没有回应答案每个新行都可用答案? – onlyme 2012-08-02 20:53:53

+0

我不确定;我从来没有用过HTML :: Query。浏览文档,我认为您需要运行查询来获取每个元素,然后为每个元素处理子元素​​。 – chepner 2012-08-02 21:01:01

+0

好的,我会试试。我能够在不使用HTML :: Query的情况下获得我需要的内容,并且只需使用given()/ when语句。这感觉就像我在复杂的问题。感谢尝试:) – onlyme 2012-08-02 21:27:01