@kyanny's blog

My thoughts, my life. Views/opinions are my own.

HTML::TreeBuilder (など) で HTML をパースしたあと as_HTML() したときに タグがつかないようにしたい

具体的には以下のテストにパスするようにしたい。 $tree->implicit_tags(0); がそれっぽい気がするのだけど、うまくいかない・・・。

実際にやりたいことまではあともうワンステップあり、 HTML 中の 'div.blah' 以下のノードツリーはのぞいた HTML 部分が欲しいので、 HTML::Selector::XPath + HTML::TreeBuilder::XPath で該当ノードツリーを指定したのち削除してしまって、残った部分を as_HTML('') でとってくれば楽ちんだな、と思ったのだけど、 タグをくっつけられてしまうのでその手が使えず・・・という次第。使い方が間違ってるのか、見当違いのメソッドを使ってしまっているのか。困った。

追記

Web::Scraper のソースを読んだら、 __get_value() のなかで

        my $html = $node->as_XML;
        $html =~ s!^<.*?>!!;
        $html =~ s!\s*</\w+>\n*$!!;
        return $html;

などとやっていたので、どうやら ... は必ずくっついてしまって回避できないのかなぁ。これにならって自分で消すしかなさそう。