0
use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
my $mech = new WWW::Mechanize;
my $tree = new HTML::TreeBuilder::XPath;
my $url = "http://www.elaws.gov.bw/wondersbtree.php";
$mech->get($url);
$tree->parse($mech->content());
@nodes = $tree->findnodes("//p[font = 'PRINCIPAL LEGISLATION']");
print @nodes[0]->as_HTML;

上記のコードは、検索された HTML 要素を出力しますが、最終</p>タグがありません。なんで?これは意図的なものですか、それともモジュールのバグですか?

4

2 に答える 2

2

デフォルトでは、as_HTMLメソッドは特定のオプションの終了タグを省略します。

as_HTML

$s = $h->as_HTML();
$s = $h->as_HTML($entities);
$s = $h->as_HTML($entities, $indent_char);
$s = $h->as_HTML($entities, $indent_char, \%optional_end_tags);

[ ... ]

が指定および定義されている場合\%optional_end_tagsは、終了タグがオプションであるすべてのタグ名に対して真の値を保持するハッシュへの参照である必要があります。\%HTML::Element::optionalEndTagこれは のエイリアスで%HTML::Tagset::optionalEndTagあり、執筆時点では の真の値が含まれていますp, li, dt, dd。渡すのに役立つ値は、空の hashref{}です。これは、このダンプの終了タグがオプションではないことを意味します。

例えば:

use strict;
use warnings 'all';
use 5.010;

use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder::XPath->new_from_content('<p>foo</p>');
my @nodes = $tree->findnodes('//p');

say $nodes[0]->as_HTML(undef, undef, {});

出力:

<p>foo</p>

use strict;常にとを使用する必要があることに注意してくださいuse warnings 'all';

于 2016-06-01T20:59:23.430 に答える
0

HTML では、P 要素の終了タグはオプションです。

于 2016-05-31T02:12:36.607 に答える