受講料が最大70%OFF 受講料が最大70%OFF

RubyでXMLを扱うにはrexmlライブラリを使います。なお、XMLはタグでデータを囲むフォーマットが特徴のテキストファイルで、設定ファイルなどで使われます。

なおXMLはテキストファイルはテキストファイルなので独自の処理を作ることも可能ですが、rexmlライブラリを利用することで簡単にRubyのプログラムでXMLファイルを扱えます。

今回はRubyのrexmlライブラリの使い方について紹介します。

Rubyでxmlを扱うには

Rubyを使えば文字列を解析するプログラムが簡単に作れます。しかし、XMLから目的の要素を取り出す処理を作るのは面倒です。そのような場合、XMLを簡単に扱えるrexmlライブラリを利用してください。

まずはRubyでXMLを扱うためのrexmlライブラリについて紹介します。

Ruby標準のrexmlライブラリ

Rubyは少ない記述で読みやすいプログラムが書けるプログラミング言語ですが、Ruby on RailsにはWebシステム構築に使われる多く機能が用意されており、それを使うことで最小の記述でシステム構築が可能です。さらにRubyGemsなどの外部ライブラリも利用できます。

なお、Rubyの標準システムとして用意されて外部ライブラリもあり、そのようなライブラリはRunyGemsからダウンロードしなくても利用可能です。

そして今回紹介するremxlライブラリもそのような標準の外部ライブラリの1つです。さらにremxmlライブラリには多くのサブライブラリが用意されているので、利用したい機能を選んで利用してください。

remxlライブラリを使う方法

remxlは標準で用意されている外部ライブラリなので、Rubyが使える環境であれば、remxlライブラリも利用できます。

なお、remxlライブラリには幾つかのサブライブラリが含まれており、利用したい機能に合わせてそのサブライブラリを利用します。例えば、XMLを読み込んでそのデータをDOMツリーに変換するには、documentサブライブラリを利用します。

remxlライブラリのdocumentサブライブラリを利用する宣言例

require 'rexml/document'

XMLとはどんなデータ?

今回扱うXMLとは、アプリケーションの設定などで採用されることの多い、汎用性の高いデータ形式です。そしてXMLはテキスト形式なので、XMLで書かれたファイルは、メモ帳などのテキストエディタで簡単に編集できます。

次から、今回紹介するRubyのrexmlライブラリが扱うXMLについて解説します。

そもそもXMLとは

XMLとは、Extensible Markup Languageの略で、そのまま日本語に翻訳すると拡張可能なマークアップ言語という意味です。なお、マークアップ言語とは、タグや記号を使ってそのデータが何かを明示しているのが特徴の記述方法です。そしてXMLは、データの意味を示すタグでデータを囲う書き方が特徴です。

なおタグを利用するマークアップ言語として有名なのがWebページを記述するのに使われるHTMLです。そしてXMLはHTMLと同じような書き方ができ、より汎用性が高いフォーマットと言えます。

タグで囲む書き方

XMLは、”で囲まれたタグと”で囲まれたタグでデータを囲みます。

XMLのタグの書き方

<タグ名>データ</タグ名>

XMLのデータを囲むタグは、そのデータが何の情報かを記述することで、変数名とデータのペアを記述できるのが特徴です。

XMLの例

<プログラミング言語>
 <言語名>Ruby</言語名>
 <タイプ>スクリプト</タイプ>
 <リリース形態>オープンソース</リリース形態>
 <開発者>まつもと ゆきひろ氏</開発者>
 <バージョン>3.10</バージョン>
</プログラミング言語>

XMLが向いている用途

アプリケーションの設定ファイルは、人が読めるテキストファイルで、しかもプログラムが処理しやすいフォーマットでなければなりません。その点XMLは、テキストファイルであり、要素名とそれに対応したデータを自由に記述できます。

そのためXMLは、アプリケーションの設定ファイルに向いているデータ形式です。さらにXMLは、拡張性が高くプログラムの処理にも向いています。今回紹介するRubyのrexmlライブラリを利用してRuby on Railsで開発するシステムなどで、ぜひ利用してください。

rexmlライブラリの使い方

RubyでXMLファイルを扱う場合、先ほど紹介したremxlライブラリを利用することで簡単にXMLに記述されたデータをプログラムの中で活用可能です。次からremxlライブラリを使ったXML操作方法について紹介します。

XMLファイルを読み込み

remxlライブラリを利用してXMLファイルをRubyのプログラムで扱う際、ファイルを読み込んでDOMと呼ばれるツリー状のオブジェクトにします。そしてremxlライブラリでXMLファイルを読み込むための仕組みが、remxlライブラリのDocumentクラスです。

Documentクラスでは、newメソッドを用いてXMLを扱うためのオブジェクトを作成します。またXMLファイルをプログラムで利用するには、まずopenメソッドでXMLファイルを読み込み、それをnewメソッドの引数に指定してください。

XMLのDocumentオブジェクトを生成するnewメソッドの使い方

DOMオブジェクト = REXML::Document.new(open(XMLファイル名))

XMLファイルを読み込む例

require 'rexml/document'
filename = "sample.xml"
dom = REXML::Document.new(open(filename))

DOMオブジェクトから要素を取り出すには

先ほどのREXML::Document.newで読み込んだDOMから要素を取り出すには、elementsメソッドを利用します。なおelementsメソッドはDOMの子要素を取り出すメソッドで、XMLのタグ名を「/」で区切ることで要素の場所を指定することが可能です。

elementsメソッドの使い方

変数 = DOMオブジェクト.elements(‘/タグ名/タグ名/…)

elementsメソッドの使い方

dom = REXML::Document.new(open("model.xml")
model_a = dom.elements['root/a'].text
model_b = dom.elements['root/b'].text
model_c = dom.elements['root/c'].text

これはXMLファイル「model.xmlからXMLデータをDOMオブジェクトdomに読み込み、elementsメソッドを使ってrootタグの下にあるaタグ、bタグ、タグのデータを、それぞれmodel_a、model_b、model_cに取り込む例です。

複数の要素はeachメソッドで

先ほど紹介したelementsメソッドは、同じタグの要素が複数あった場合、最初の要素のみ返します。もし、全ての要素を取り出す場合は、eachメソッドを組み合わせて全ての要素を取り出してください。

例えば、次のようなXMLを扱う場合、elementsメソッドは最初の「one」のみ表示します。そこでelementsにeachメソッドを組み合わせることで全ての要素を取り出すことが可能です。

同じタグを複数使ったXMLの例

<root>
  <data>one</data>
  <data>two</data>
  <data>three</data>
</root>

elementsのみの場合の例

require 'rexml/document'
filename = "sample2.xml"
dom = REXML::Document.new(open(filename))
puts dom.elements["/root/data"].text  # oneのみ表示する

elementsにeachメソッドを組み合わせた例

require 'rexml/document'
filename = "sample2.xml"
dom = REXML::Document.new(open(filename))
dom.elements.each('/root/data') do |name|
  puts name.text   # one, two, threeを順に表示する
end

XMLファイルをハッシュに取り込む

先ほどrexmlライブラリを用いてXMLファイルをDOMオブジェクトとして取り込み、要素の場所を指定して取り出す方法を紹介しました。

Ruby on Railsの機能を利用すれば、ハッシュに変換することが可能です。もしRuby on RailsでXMLを利用するなら、ActiveSupportのXMLをRubyのハッシュに変換するHash.from_xmlメソッドを利用できます。

Hash.from_xmlメソッドは、XMLデータを取り込んだDOMオブジェクト引数に指定すると、ハッシュを返すメソッドです。なお、ActiveSupportをRubygemからダウンロードしておけば、下記の例のようにrequireで取り込むことでRubyのプログラムとして実行することが可能です。

Hash.from_xmlメソッドでXMLをハッシュに変換する例

require 'rexml/document'
require 'active_support'
require 'active_support/core_ext'

filename = "a.xml"
dom = REXML::Document.new(open(filename))

hash = Hash.from_xml(dom.to_s)

まとめ

これまで紹介したようにRubyでXMLファイルを扱うなら、rexmlライブラリを利用してください。なおXMLファイルを読み込み、そのデータをDOMオブジェクトにするには、rexmlライブラリに含まれるDocumentクラスのnewメソッドを利用します。

さらにRuby on RailsにはDOMオブジェクトをハッシュに変換する機能があるので、この機能の利用も検討してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。