jruby での nokogiri 。チュートリアルの勝手なまとめ その4
さて、jruby での nokogiri チュートリアルの勝手なまとめ の第4回目です。
前にも書きましたように、jruby 1.5.6 は cruby1.8.7 とほぼ同等ですが、マルチバイト文字の扱いはまったく同じではありません。私は cruby1.8.7 での動作の検証はやってません。
nokogiri のバージョンは 1.4.4.2 です。
ubuntu10.04 を使用していますので、文字環境は utf-8 がデフォです。
●HTML / XMLのドキュメント の内容を変更する
このような HTMLドキュメントがあるとする。
$KCODE = 'UTF8'require 'rubygems'
require 'nokogiri'
@doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML
<body>
<h1>Three's Company</h1>
<div>A love triangle.</div>
</body>
EOHTML
# そのヘッダのテキストの内容を変更する。
h1_obj = @doc.at_css "h1"
h1_obj.content = "Snap, Crackle and Pop"
puts @doc.to_html
=begin
実行結果
<body>
<h1>Snap, Crackle and Pop</h1>
<div>A love triangle.</div>
</body>
=end
●ノード(xml の要素)の移動・属性変更・ノードの新規作成・ラッピング
$KCODE = 'UTF8'require 'rubygems'
require 'nokogiri'
puts '■ ノード(xml の要素)の移動'
puts '■ ノードを移動する最も簡単な方法は、その親を割り当てること'
@doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML
<body>
<h1>Three's Company</h1>
<div>A love triangle.</div>
</body>
EOHTML
h1_obj = @doc.at_css "h1"
div_obj = @doc.at_css "div"
h1_obj.parent = div_obj
puts @doc.to_html
=begin
実行結果
<body>
<div>A love triangle.<h1>Three's Company</h1>
</div>
</body>
=end
puts '■ そのノードを他の場所(次の隣)へ移動'
div_obj.add_next_sibling(h1_obj)
puts @doc.to_html
=begin
実行結果
<body>
<div>A love triangle.</div>
<h1>Three's Company</h1>
</body>
=end
puts '■ ノードと属性の変更'
h1_obj.name = 'h2'
h1_obj['class'] = 'show-title'
puts @doc.to_html
=begin
実行結果
<body>
<div>A love triangle.</div>
<h2 class="show-title">Three's Company</h2>
</body>
=end
puts '■ 新しいノードの作成'
h3_obj = Nokogiri::XML::Node.new "h3", @doc
h3_obj.content = "1977 - 1984"
h1_obj.add_next_sibling(h3_obj)
puts @doc.to_html
=begin
実行結果
<body>
<div>A love triangle.</div>
<h2 class="show-title">Three's Company</h2>
<h3>1977 - 1984</h3>
</body>
=end
puts '■ ノードセットのラッピング'
nodes = @doc.css "h1,div"
wrapper = nodes.wrap("<div class='container'></div>")
puts @doc.to_html
=begin
実行結果
<body>
<div class="container"><div>A love triangle.</div></div>
<h2 class="show-title">Three's Company</h2>
<h3>1977 - 1984</h3>
</body>
=end
この項、まだ続きます。