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

この項、まだ続きます。