2016-05-31 12 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; 

Der obige Code gibt das gesuchte HTML-Element aus, aber es fehlt das letzte </p>-Tag. Warum? Ist das beabsichtigt oder ist es ein Fehler im Modul?HTML :: TreeBuilder :: XPath fehlendes letztes Tag in Ergebnis

Antwort

0

In HTML ist das End-Tag optional für P elements.

+0

Die ursprüngliche HTML-Quelle enthält das End-Tag. – CJ7

+0

@ CJ7, Was ist dein Standpunkt? – ikegami

2

Standardmäßig läßt die as_HTML Methode bestimmten optionalen End-Tags:

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); 

[...]

Wenn \%optional_end_tags angegeben und definiert, soll es eine Referenz auf einen Hash sein, der einen wahren Wert für jeden Tag-Namen enthält, dessen End-Tag optional ist. Der Standardwert ist \%HTML::Element::optionalEndTag. Dies ist ein Alias ​​für %HTML::Tagset::optionalEndTag, der zum Zeitpunkt des Schreibens echte Werte für p, li, dt, dd enthält. Ein nützlicher Wert, der übergeben werden muss, ist eine leere Hashadresse, {}, was bedeutet, dass keine End-Tags für diesen Speicherauszug optional sind.

Zum Beispiel:

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, {}); 

Ausgang:

<p>foo</p> 

Beachten Sie, dass Sie sollten immer use strict; und use warnings 'all';.