HTML::TreeBuilderいいんだけど。。
escape関係が微妙なんだよなぁ。
use strict;
use warnings;
use HTML::TreeBuilder;
my $html = 'K&C and K&C';
my $tree = HTML::TreeBuilder->new;
$tree->parse($html);
$tree->eof;
print $tree->as_XML;
これで帰ってくるのは
<html><head></head><body>K&C and K&C</body></html>
これはひどい。
unsafeなものだけescapeしてsafeなものはしないので、escapeがソースとはずれてしまう。
& だけじゃなくて <>やマルチバイト系全部こうなる。
Plaggerでは HTML::Element::_xml_escape
を上書きして対応してるけど、ちょろっと使う場合にいつもそれを書くはめんどいので、
$tree->parse( encode_entities($html, '&') );
とか、&を余分にエスケープしてからパースさせるようにして
decode_entities( $tree->as_XML );
とかして取り出している。
ものすごくBKです。なんとかならんかなぁ。