XPath式
REXMLはXPathもサポートします。XPathを使用すると、OSのファイルシステムのディレクトリに似た構文を使用して、XML文書の一部にアクセスできます。では、ギターリストの最初のmodelをプリントしてみましょう。そのためには、XML文書内の最初のmodel要素を探す必要があります。この処理をREXMLのXPath APIを使用して実行するには、次のコードを使用します。
require "rexml/document" include REXML # so that we don't have to prefix everything with # REXML::... doc = Document.new File.new("guitars.xml") # print doc firstmodel = XPath.first( doc, "//model" ) print firstmodel
XPath.firstは、コレクション内の最初の要素を返すメソッドです。このメソッドを使用して、doc文書内の最初の要素を取得できます。ここでは、XPath.firstに"//model"というXPath式を指定することで、ルート要素("//"で指定)から検索をスタートし、すべてのmodel要素を探すよう指示しています。このスクリプトを実行すると、次のように出力されます。
次は、すべてのギターの年式をプリントします。年式はmodel要素のyear属性として格納されています。この処理を行うには、XPath.eachメソッドに//model/attribute::yearというXPath式を渡します。
require "rexml/document" include REXML # so that we don't have to prefix everything with # REXML::... doc = Document.new File.new("guitars.xml") XPath.each( doc, "//model/attribute::year") { |element| puts element }
このスクリプトを実行すると、次のように出力されます。
REXMLで文書を更新する
REXMLでXML文書要素にアクセスする方法を理解したところで、今度はREXML APIを使って文書を更新してみましょう。APIを使用して、新しいギターメーカーとそのメーカーのモデルを1つ追加します。「REXMLUpdateTest.rb」という名前の新しいファイルに、次のコードを入力してください。
require "rexml/document" include REXML # so that we don't have to prefix everything with # REXML::... doc = Document.new File.new("guitars.xml") root = doc.root make = Element.new "make" make.attributes["name"] = "Gibson" model = Element.new "model" model.attributes["sn"] = "99999999" model.attributes["year"] = "2007" model.attributes["country"] = "USA" model.add_element "name" model.elements["name"].text = "SG" model.add_element "price" model.elements["price"].text = "1250.00" model.add_element "color" model.elements["color"].text = "Red" make.add_element model root.add_element make print doc
このコードでは、まず文書のルート要素を取得し、その要素を変数rootに格納します。次に、make要素とmodel要素を作成します。属性と要素の両方をmodel要素内に作成していることに注目してください。そして最後に、modelをmakeの子要素として追加し、makeを文書ルートに追加しました。このスクリプトを実行すると、次のように表示されます。
ギターリストに新しいメーカーとそのメーカーのモデルが追加されました。
まとめ
この記事では、REXMLライブラリに注目し、このライブラリを使って、RubyアプリケーションやRailsアプリケーションでXMLを処理する方法を紹介しました。RubyやRailsでは大抵のことが簡単にできますが、REXMLでも同様に、セットアップとプログラミングを簡単かつ直感的に行うことができます。
REXMLを利用すると、XMLサポートを容易にアプリケーションに追加できます。操作の習得も簡単です。REXMLが提供する機能は他にも多数あるので、じっくり調べて、役に立つものがないかどうか確認してみてください。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
Dominic Da Silva(Dominic Da Silva)
Java、Ruby、および.NETベースのWebとWebサービス開発を専門とするソフトウェアコンサルティング会社、SilvaSoft, Incの代表取締役。2000年からJavaを使い始め、Linuxは1.0の時代からのユーザーである。また、Java2プラットフォームのSun認定も取得。美しいカリブ海の島国...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア



