Ruby:
XMLの扱い方
方法
Rubyに含まれるREXMLを使用して、XMLスニペットを解析してみましょう:
require 'rexml/document'
include REXML
xml_data = <<-XML
<fruits>
<fruit name="apple" color="green"/>
<fruit name="banana" color="yellow"/>
</fruits>
XML
document = Document.new(xml_data)
document.elements.each('fruits/fruit') do |element|
puts "名前: #{element.attributes['name']}, 色: #{element.attributes['color']}"
end
出力:
名前: apple, 色: green
名前: banana, 色: yellow
XMLの生成も同様に簡単です:
doc = Document.new
doc.add_element 'fruits'
apple = doc.root.add_element 'fruit', {'name' => 'apple', 'color' => 'green'}
banana = doc.root.add_element 'fruit', {'name' => 'banana', 'color' => 'yellow'}
puts doc
XML出力:
<fruits>
<fruit name="apple" color="green"/>
<fruit name="banana" color="yellow"/>
</fruits>
詳細:
XMLの起源は1990年代にさかのぼり、ウェブドキュメント用のSGMLの簡易化したサブセットとして始まりました。冗長ですが非常に構造化されており、それが定着した理由です。JSONやYAMLがそのシンプルさから人気を集めていますが、XMLは多くの企業やレガシーシステムで強力に残っています。
RubyはXMLを扱うためのいくつかの方法を提供します。REXMLはすぐに始められる全Rubyライブラリです。Nokogiriは、速度と追加機能を提供する、より高速なCライブラリをラップするジェムです。どちらを選ぶかですが、小規模なタスクにはREXMLから始め、もっとパワーが必要な場合はNokogiriに移行すると良いでしょう。
内部では、XMLの解析は文字列をDOMまたはSAXモデルへの変換についてです。DOMはメモリ内にツリーを作成し、SAXはドキュメントをストリームし、解析するにつれてイベントを発生させます。REXMLは両方のモデルを提供しますが、Nokogiriが使用するC拡張機能よりも遅い傾向があります。
参照
- Ruby REXMLドキュメント:https://www.rubydoc.info/stdlib/rexml
- Nokogiriジェム:https://nokogiri.org/
- XML仕様:https://www.w3.org/XML/
- SAXの紹介:https://www.saxproject.org/
- YAMLとJSONとXMLの比較:https://www.upwork.com/resources/json-vs-xml-vs-yaml