Comment fonctionne exactement la fonction « parent » de HTML :: travail TreeBuilder?
Question
#!/usr/bin/perl
use warnings;
use strict;
use HTML::TreeBuilder;
my $testHtml = "
<body>
<h1>
<p>
<p>HELLO!
</p>
</p>
</h1>
</body>";
my $parsedPage = HTML::TreeBuilder->new;
$parsedPage->parse($testHtml);
$parsedPage->eof();
my @p = $parsedPage->look_down('_tag' => 'p');
foreach (@p) {print $_->parent->tag, " : ", $_->tag, "\t", $_->as_text, "\n";}
Après l'exécution du script ci-dessus, la sortie est:
body : p
body : p HELLO!
Voyant que toutes les balises sont imbriquées l'une après l'autre, je pense que le parent de la première balise p
serait h1
, et le parent de la deuxième balise de p
serait p
. Pourquoi la fonction parent montrant la balise body
pour les deux?
La solution
Your HTML is invalid. And given that HTML::TreeBuilder is a subclass of HTML::Parser, I can only assume that the parser is doing what it can to transform your document into valid HTML.
You can call $parsedPage->as_HTML to see what the parser has done to your HTML. It gives me this:
<html><head></head><body><h1></h1><p><p>HELLO! </body></html>
Perhaps you should pass your HTML through a validator or HTML::Tidy, before processing it.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow