所以我有一个报告工具,它在HTML文件中吐出作业调度统计信息,我希望使用Perl来使用这些数据.我不知道如何逐步浏览HTML表格.
我知道如何使用jQuery做到这一点
$.find('<tr>').each(function(){
variable = $(this).find('<td>').text
});
Run Code Online (Sandbox Code Playgroud)
但我不知道如何用Perl做同样的逻辑.我该怎么办?下面是HTML输出的示例.每个表行包括三个相同的统计信息:对象名称,状态和返回代码.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="UC4 Reporting Tool V8.00A">
<Title></Title>
<style type="text/css">
th,td {
font-family: arial;
font-size: 0.8em;
}
th {
background: rgb(77,148,255);
color: white;
}
td {
border: 1px solid rgb(208,213,217);
}
table {
border: 1px solid grey;
background: white;
}
body {
background: rgb(208,213,217);
}
</style>
</HEAD>
<BODY>
<table>
<tr>
<th>Object name</th>
<th>Status</th>
<th>Return code</th>
</tr>
<tr>
<td>JOBS.UNIX.S_SITEVIEW.WF_M_SITEVIEW_CHK_FACILITIES_REGISTRY</td>
<td>ENDED_OK - ended normally</td>
<td>0</td>
</tr>
<tr>
<td>JOBS.UNIX.ADMIN.INFA_CHK_REP_SERVICE</td>
<td>ENDED_OK - ended normally</td>
<td>0</td>
</tr>
<tr>
<td>JOBS.UNIX.S_SITEVIEW.WF_M_SITEVIEW_CHK_FACILITIES_REGISTRY</td>
<td>ENDED_OK - ended normally</td>
<td>0</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
ara*_*nid 11
该HTML ::查询模块周围的HTML解析器,提供了一个查询的界面,熟悉的jQuery用户的包装.所以你可以写一些像
use HTML::Query qw(Query);
my $docName = "test.html";
my $doc = Query(file => $docName);
for my $tr ($doc->query("td")) {
for my $td (Query($tr)->query("td")) {
# $td is now an HTML::Element object for the td element
print $td->as_text, "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
阅读HTML :: Query文档以更好地了解如何使用它 - 上面几乎不是最漂亮的例子.
您可以使用RegExp,但Perl已经为此特定任务构建了模块.查看HTML :: TableContentParser
您可能会这样做:
use HTML::TableContentParser;
$tcp = HTML::TableContentParser->new;
$tables = $tcp->parse($HTML);
foreach $table (@$tables) {
foreach $row (@{ $tables->{rows} }) {
foreach $col (@{ $row->{cols} }) {
# each <td>
$data = $col->{data};
}
}
}
Run Code Online (Sandbox Code Playgroud)