@kyanny's blog

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

HTML::Element と HTML::TreeBuilder で盆栽

HTML::Element とか HTML::TreeBuilder で HTML 構文木をいじることを盆栽と呼ぶらしいですが、最近よく盆栽してていろいろ覚えたことがあるのでメモ。

as_HTML() で HTML エンティティに変換させない


HTML::Element#as_HTML  HTML  "all unsafe characters"  HTML 
my $html = $elem->as_HTML('');


HTML::TreeBuilder のインスタンスに対して as_HTML() を呼ぶと タグをつけられてしまう


 HTML::TreeBuilder::XPath  HTML  HTML::TreeBuilder  Web::Scraper  __get_value   
use     HTML::TreeBuilder;

$tree->parse_file($filename);
$body = $tree->guts();                  #$treeをそのままas_HTMLで出力すると、implicitなtag(htmlなど)が挿入されてしまう。
     #そのため、最上位をHTML::Elementとして取得。elementifyでも上記と同様。

 

HTML::Element の属性を操作する

ちょっと葉が多いので切ってみよう的な。普通に属性値の中身を変更するのは $elem->attr('class' => 'klass') とかで良さそうだとわかったのだけど、属性そのものを消したいときはどうやんの?というと、 $elem->attr('class' => undef) でいける。


HTML の中から特定のタグだけ削除する(ただしツリー構造ごと削除はしない)


 div p pre  pre  pre pp


HTML::Element  find*  look_down()  look_up() 使使 jQuery  $.ajax() 使

 HTML::Element#as_HTML p HTML  as_XML() 使 strict  HTML 

HTML::Element#content_list の返り値


$elem->content_list() 使使


使


 HTML  HTML::TreeBuilder::XPath  HTML::Selector::XPath 
$tree->find(selector_to_xpath('div.blah'))->delete();
$tree->guts()->as_XML('');

 HTML