2012-08-02 73 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