MENU閉じる

LAB

RubyプログラムTIPS

研究室プログラムTIPSRuby2009.3.24

こはRubyより

前回の流れに沿って、RubyでXMLを読みこんでみたいと思います。
XMLの読み込みには、Rubyで実装されたXMLパーサーの
「REXML」を使ってみます。

今回読み込むデータは下の通りです。
簡単なデータを定義した・・・という想定です。

<?xml version="1.0" encoding="utf-8"?>
<root>
<data name="sample_data1" date="2009/03/24">
<string count="2">apple orange</string>
<number count="3">123 456 7890</number>
</data>
<data name="sample_data2" date="2009/03/24">
<string count="1">grape</string>
<number count="5">1 2 3 4 5</number>
</data>
</root>

XML読み込み、その内容を出力しているのが下のスクリプトです。

require 'rexml/document'
# XMLファイルを読み込み
xml = REXML::Document.new(File.open('sample.xml'))
# data要素を検索
xml.elements.each('root/data') do | data_tag |
    puts 'Name : ' + data_tag.attributes['name']
    puts 'Date : ' + data_tag.attributes['date']
    # string要素を出力
    data_tag.elements.each('string') do | string_tag |
        puts '  Count : ' + string_tag.attributes['count']
        puts '  Text  : ' + string_tag.text
    end
    # number要素を出力
    data_tag.elements.each('number') do | number_tag |
        puts '  Count : ' + number_tag.attributes['count']
        puts '  Text  : ' + number_tag.text
    end
end

その実行結果は、下の通りになります。

Name : sample_data1
Date : 2009/03/24
  Count : 2
  Text  : apple orange
  Count : 3
  Text  : 123 456 7890
Name : sample_data2
Date : 2009/03/24
  Count : 1
  Text  : grape
  Count : 5
  Text  : 1 2 3 4 5

要素の属性や内容へのアクセス方法はそれぞれ

属性  attributesメンバに対して、属性名を使って配列アクセス
内容  textメンバへアクセス

で行います。

XML形式で出力されるデータは意外と多いですが、
ゼロからC/C++で扱うとちょっと大変だったりします。

スクリプト言語を使い、作品が直接読み込むデータへコンバートしたり、
C/C++で扱いやすい中間データへコンバートすれば、
全体の作業量はかなり減るんじゃないでしょうか!

そうやって時間が作れれば、その時間を使ってさらなる高みを目指して!ですよね。

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE