0

我正在使用HTML::Query从每个 td 标签中提取内容。我确实想要 html 格式的。现在当我打印它时,它似乎打印了两次,大部分时间。有什么想法吗?这是我正在使用的代码:

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>
4

1 回答 1

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
}
于 2012-08-02T20:50:27.563 回答