Perl HTML::Element 如何 look_down 在匹配标签后提取下一个标签
Perl HTML::Element how to look_down to extract next tag after a matching tag
我正在使用 HTML::TreeBuilder 处理 HTML 个文件。在那些文件中,我可以有定义列表,其中有术语 "Database" 和定义 "Database Name"。模拟的 html 看起来像这样:
#!/usr/bin/perl -w
use strict;
use warnings;
use HTML::TreeBuilder 5 -weak;
use feature qw( say );
my $exampleContent = '<dl>
<dt data-auto="citation_field_label">
<span class="medium-bold">Language:</span>
</dt>
<dd data-auto="citation_field_value">
<span class="medium-normal">English</span>
</dd>
<dt data-auto="citation_field_label">
<span class="medium-bold">Database:</span>
</dt>
<dd data-auto="citation_field_value">
<span class="medium-normal">Data Archive</span>
</dd>
</dl>';
my $root = HTML::TreeBuilder->new_from_content($exampleContent);
my $dlist = $root->look_down("_tag" => "dl");
foreach my $e ($dlist->look_down("_tag" => 'dt', "data-auto" => "citation_field_label")) {
if ($e->as_text =~ m/Datab.*/) {
say $e->as_text; # I have found "Database:" 'dt' field
# now I need to go to the next field 'dd' and return the value of that
}
}
我需要确定文件来自哪个数据库以及 return 值。
当我识别出 <dt>
中包含 "Database:" 时,我希望能够说出类似 say $dlist->right()->as_text;
的内容,但我不知道该怎么做。非常感谢您的想法。
你快到了。使用
$e->right->as_text;
给我 "Data Archive"。
我正在使用 HTML::TreeBuilder 处理 HTML 个文件。在那些文件中,我可以有定义列表,其中有术语 "Database" 和定义 "Database Name"。模拟的 html 看起来像这样:
#!/usr/bin/perl -w
use strict;
use warnings;
use HTML::TreeBuilder 5 -weak;
use feature qw( say );
my $exampleContent = '<dl>
<dt data-auto="citation_field_label">
<span class="medium-bold">Language:</span>
</dt>
<dd data-auto="citation_field_value">
<span class="medium-normal">English</span>
</dd>
<dt data-auto="citation_field_label">
<span class="medium-bold">Database:</span>
</dt>
<dd data-auto="citation_field_value">
<span class="medium-normal">Data Archive</span>
</dd>
</dl>';
my $root = HTML::TreeBuilder->new_from_content($exampleContent);
my $dlist = $root->look_down("_tag" => "dl");
foreach my $e ($dlist->look_down("_tag" => 'dt', "data-auto" => "citation_field_label")) {
if ($e->as_text =~ m/Datab.*/) {
say $e->as_text; # I have found "Database:" 'dt' field
# now I need to go to the next field 'dd' and return the value of that
}
}
我需要确定文件来自哪个数据库以及 return 值。
当我识别出 <dt>
中包含 "Database:" 时,我希望能够说出类似 say $dlist->right()->as_text;
的内容,但我不知道该怎么做。非常感谢您的想法。
你快到了。使用
$e->right->as_text;
给我 "Data Archive"。