読者です 読者をやめる 読者になる 読者になる

HTML::TreeBuilderのas_HTMLとas_XML

HTML::TreeBuilderのas_HTMLが思った結果を返してくれなくて、ちょっとはまったのでメモ。

#!/usr/bin/env perl
use strict;
use warnings;
use HTML::TreeBuilder;
use Perl6::Say;

my $html = <<EOM;
<p>
aaaa
</p>
<br>
<p>
bbb
</p>
EOM

my $tree = HTML::TreeBuilder->new;
$tree->parse($html);
$tree->eof;
say $tree->as_HTML;
say $tree->as_XML;
$tree->delete;

実行結果

<html><head></head><body><p> aaaa <br /><p> bbb </body></html>
<html><head></head><body><p> aaaa </p><br /><p> bbb </p></body></html>

as_HTMLの方は、元々のHTMLに書いていたpの閉じタグをわざわざ削除してしまう。
ので、as_HTMLの結果をブラウザで表示すると、ブラウザが br の後ろに p の閉じタグを補完するので、改行が1つ足りない感じになる。
as_XMLを使うと、ちゃんと p の閉じタグを返してくれるので、期待通りの結果になった。