jruby での nokogiri 。チュートリアルの勝手なまとめ とりあえず最終回

さて、jruby での nokogiri チュートリアルの勝手なまとめ の最終回です。

前にも書きましたように、jruby 1.5.6 は cruby1.8.7 とほぼ同等ですが、マルチバイト文字の扱いはまったく同じではありません。私は cruby1.8.7 での動作の検証はやってません。

nokogiri のバージョンは 1.4.4.2 です。

ubuntu10.04 を使用していますので、文字環境は utf-8 がデフォです。

●整形式のマークアップ(不正の修正、厳格な適用の例)


# 整形式のマークアップ
# もし不正なマークアップがあれば、nokogiri は修正を試みる。

$KCODE = 'UTF8'

require 'rubygems'
require 'nokogiri'

badly_formed = <<-EOXML

foo
bar

EOXML

bad_doc = Nokogiri::XML badly_formed

puts 'bad_doc を出力'
puts bad_doc


=begin

実行結果
bad_doc を出力


foo
bar

=end

# 解析オプションNOERRORSとNOWARNINGSがオフの場合、
# エラーを追跡する。(デフォルトはオフ)

puts 'bad_doc.errors を出力'
puts bad_doc.errors

=begin

実行結果
bad_doc.errors を出力
Opening and ending tag mismatch: open line 2 and root
Premature end of data in tag root line 1

=end


# より厳格に整形式を扱う

puts 'Strict Well-Formedness の場合'

begin
bad_doc = Nokogiri::XML(badly_formed) { |config| config.strict }
rescue Nokogiri::XML::SyntaxError => e
puts "caught exception: #{e}"
end


=begin

実行結果
Strict Well-Formedness の場合
caught exception: Premature end of data in tag root line 1

=end

●Nokogiri_HTML_Builderの使い方


$KCODE = 'UTF8'

require 'rubygems'
require 'nokogiri'

builder = Nokogiri::HTML::Builder.new{
html{
body{
h1{ text "nokogiri 1.2.3 リリース" }
text "こんにちは!アーロンです! "
}
}
}

puts builder.to_html

=begin

実行結果(日本語は文字化け)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<h1>nokogiri 1.2.3 &#12522;&#12522;&#12540;&#12473;</h1>&#12371;&#12435;&#12356;&#12385;&#12399;&#65281;&#12450;&#12540;&#12525;&#12531;&#12391;&#12377;&#65281; </body></html>

=end


# ## 日本語エンコーディングの復元操作

html_doc = Nokogiri::HTML(builder.to_html, nil, 'utf-8')

puts html_doc

=begin

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<h1>nokogiri 1.2.3 リリース</h1>こんにちは!アーロンです! </body></html>

=end

いちおう、nokogiri チュートリアルの勝手なまとめ はこれにてとりあえず終了です。
たぶん、おまけ的にあと1、2回付け足しを書くと思います。