Nokogiriパッケージを使ってXML形式のデータを操作するためのRubyチュートリアル
2022-01-31 02:04:34
インストール方法
Ubuntuの場合、libxml2、libxsltコンポーネントをインストールする必要があります。
$ apt-get install libxml2 libxslt
それなら、できる。
$ gem install nokogiri
オプション
nokogiriは、ファイルをパースするためのオプションをいくつか用意していますが、一般的なものは以下の通りです。
- NOBLANKS : 空のノードを削除する
- NOENT : エンティティの代用
- NOERROR : エラー報告を隠す
- STRICT : 正確なパース、ファイル例外のパース時にエラーを投げる。
- NONET : 解析中のネットワーク接続を無効にします。
オプションの使用例(ブロックコールによる)。
doc = Nokogiri::XML(File.open("blossom.xml")) do |config|
config.strict.nonet
end
または
doc = Nokogiri::XML(File.open("blossom.xml")) do |config|
config.options = Nokogiri::XML::ParseOptions::STRICT | Nokogiri::XML::ParseOptions::NONET
end
パース
は、ファイル、文字列、URLなどからパースすることができます。Nokogiri::HTML、Nokogiri::XMLの2つのメソッドに依存する。
文字列を読み込むには
html_doc = Nokogiri::HTML("<html><body><h1>Mr. Belvedere Fan Club</h1></body></html>")
xml_doc = Nokogiri::XML("<root><aliens><aliens><name>Alf</name></alien></aliens></ root>")
ファイルを読み込む。
f = File.open("blossom.xml")
doc = Nokogiri::XML(f)
f.close
URLを読み取る。
require 'open-uri'
doc = Nokogiri::HTML(open("http://www.threescompany.com/"))
ノードの検索
CSS セレクタだけでなく、XPATH も検索に使用できます。
<books>
<book>
<title>Stars</title>
</book>
<book>
<title>Moon</title>
</book>
</books>
xpathを使用します。
@doc.xpath("//title")
cssを使用します。
@doc.css("book title")
ノードの内容を変更する
title = @doc.css("book title").firsto
title.content = 'new title'
puts @doc.to_html
# =>
...
<title>new title</title>
...
ノードの構造を変更する
first_title = @doc.at_css('title')
second_book = @doc.css('book').last
# You can put the first title into the second book
first_title.parent = second_book
# You can also place it as you like.
second_book.add_next_sibling(first_title)
# You can also modify the corresponding class
first_title.name = 'h2'
first_title['class']='red_color'
puts @doc.to_html
# => <h2 class='red_color'>... </h2>
# You can also create a new node
third_book = Nokogiri::XML::Node.new 'book', @doc
third_book.content = 'I am the third book'
second_book.add_next_sibling third_book
puts @doc.to_html
# =>
...
<books>
...
<book> I am the third book</book>
</books>
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rubyの乱数生成方法のまとめ
-
PythonのFlaskフレームワークでSERVER_NAMEドメイン名を設定するためのチュートリアル
-
MacとLinuxでのruby+rails環境の構築
-
アプレットを置き換えるHTMLスクリプトを記述するRubyの例
-
Ruby は REXML ライブラリを使って xml 形式のデータをパースする
-
RubyGnome2 ライブラリを用いた GTK 環境での Ruby GUI プログラミングの基本的な考え方
-
Rubyにおける正規表現の使用に関する分析
-
Rubyで配列とハッシュテーブルを使う
-
Rubyのモジュールに関する基礎知識
-
Rubyの変数参照に関するいくつかの注意点