HTML :: TreeBuilderの「親」はどの程度正確に機能しますか?
質問
CPANに関するドキュメント 私が何かが足りないのでなければ、この動作を実際に説明しません。私の問題を説明するためにいくつかのクイックテストコードをまとめました:
#!/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";}
上記のスクリプトを実行した後、出力は次のとおりです。
body : p
body : p HELLO!
すべてのタグが次々にネストされているのを見て、私は最初の親が p
タグはそうでしょう h1
, 、および2番目の親 p
タグはそうでしょう p
. 。親関数が表示されているのはなぜですか body
両方のタグ?
解決
あなたのHTMLは無効です。そして、HTML :: TreeBuilderがHTML :: Parserのサブクラスであることを考えると、パーサーがあなたのドキュメントを有効なHTMLに変換するためにできることをしていると仮定することしかできません。
$ parsedPage-> as_htmlを呼び出して、パーサーがHTMLに何をしたかを確認できます。それは私にこれを与えます:
<html><head></head><body><h1></h1><p><p>HELLO! </body></html>
おそらく、処理する前に、HTMLをバリデーターまたはHTML :: Tidyに渡す必要があります。
所属していません StackOverflow