たのしいXML: RubyでXMLデータを扱う (3)
sample2.rb

2007年08月26日(日)更新


■子要素をたどる(sample2.rb)

たけち: 前回は、Documentのルート要素を取得してみたね。

さらら: ええ。Document.root を使ったわ。

たけち: で、今回は、要素の子要素をたどる方法を学ぼうね。

さらら: あっ、はい。

たけち: まず、そのメソッドを見ておくね。あるElementの子要素(Element)をたどって見てゆくには、Elementのelements.eachメソッドを使うんだ。

子要素をたどる方法


■elements.eachメソッド

さらら: えっ? Elementのelements.eachメソッドを使うって、どう使うのかしら? 図だけだとイメージがわかないわ。

たけち: あっ、そうだね。ここではRubyを使うから、Rubyでの書き方とも関連があるんだね。簡単に説明しておくね。

さらら: あっ、はい。

たけち: Rubyでは、Elementのelements.eachメソッドを使う、というイメージは次のように書けばいいってことなんだよ。

elements.eachメソッドの使い方

さらら: へぇ〜。ずいぶんと簡単なのね。私には見慣れない書き方だけど。

たけち: { から } の中で、||でかこった変数名(ここでは child)が使えるんだね。

さらら: そうなのね。

たけち: じゃあ、つぎに今回サンプルとして使うxmlデータを確認しておくね。

サンプルXMLデータ(2) sample2.xml

<?xml version="1.0" encoding="utf-8" ?>
<sample>
  <child>子1です</child>
  <child>子2です</child>
  <child>子3です</child>
</sample>

さらら: sampleという名前の要素の子要素にchildという名前の子要素が3つあるのね。

たけち: そうだね。


■Rubyサンプルプログラム(2) sample2.rbのソースコード

たけち: じゃあ、さっそくだけど、次のRubyのソースコードをみて。

さらら: はい。

Rubyサンプルプログラム(2) sample2.rb
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18

require "rexml/document"
require "kconv"

xml_file_name = "sample2.xml"

doc = nil
File.open(xml_file_name) {|xmlfile|
doc = REXML::Document.new(xmlfile)
}

print("--- ", xml_file_name, "\n")

sample = doc.root
print("root element name = ", sample.name, "\n")

sample.elements.each { |child|
    print("child element = ", child.text.tosjis, "\n")
}

さらら: さっき説明してもらったelements.eachメソッドがそのまま載っているわ。

たけち: そうだね。そこの16〜18行目でsample要素の子要素を処理しているね。

さらら: えぇ。わかるわ。


■サンプルプログラムsample2.rbの実行結果の確認

たけち: じゃ、このsample2.rbを実行した結果をみてみよう。起動は
ruby sample2.rb
と入力するんだよ。

さらら: はい。

サンプルプログラム sample2.rbの実行結果の確認

さらら: 要素名が"child"、テキストが"子1です"、"子2です"、"子2です"って順に表示されたわ。

たけち: これで大体の雰囲気はつかめたよね。

さらら: えぇ。とっても簡単にできるのでなんだかうれしいわ。

たけち: おつかれさま。今回はここまでにしておくね。

さらら: は〜い!! (^ ^*

→次回は属性を見るです。 (^ ^;


[たのしいXML のインデックス]へ