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 リリース</h1>こんいちは!アーロンです! </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回付け足しを書くと思います。