2009年03月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++で扱いやすい中間データへコンバートすれば、
全体の作業量はかなり減るんじゃないでしょうかexclamationわーい(嬉しい顔)

そうやって時間が作れれば、さらなる高みを目指してグッド(上向き矢印)グッド(上向き矢印)グッド(上向き矢印)です。

posted by 管理人 at 14:51 | Comment(1) | プログラミング