2016-05-31 14 views
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>タグがありません。どうして?これは意図的なのですか、それともモジュールのバグですか?HTML :: TreeBuilder :: XPath結果の最後のタグがありません

答えて

0

HTMLでは、終了タグはP elementsでは省略可能です。デフォルトでは、as_HTML方法は、特定のオプションの終了タグを省略

+0

元のHTMLソースには終了タグが含まれています。 – CJ7

+0

@ CJ7、あなたの主張は何ですか? – ikegami

2

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の真の値が含まれています。有用な値は空のハッシュリファレンス{}です。つまり、このダンプでは終了タグはオプションではありません。例えば

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';必要があります。

関連する問題