たのしいXML: RubyでXMLデータを扱う (4) 属性を見る
sample3.rb

2008年01月03日(木)更新


■属性を見る(sample3.rb)

たけち: 前回は要素の子要素をたどってみたね。

さらら: ええ。elements.each を使ったわ。

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

さらら: そうね。要素のあとは属性よね。

たけち: まず、そのメソッドを見ておくね。あるElementの属性(Attribute)を見るためのメソッドはいくつかあるんだけど、今回は、Elementのattributes.eachメソッドを使うんだ。その様子を次の図に示しておくね。


※Elementのattributes.eachメソッド、という言い方は正確ではありません。Elementのattributesメソッドで属性セット(Attributes)を取得し、Attributesのeachメソッドでひとつひとつの属性の名前と値を取得しています。

属性をみる方法


■attributes.eachメソッド

さらら: あっ。前回の Elementのelements.eachメソッドの働きに似ているわね。

たけち: そうだね。書き方も前回に似ているよ。 じゃあ、つぎに今回サンプルとして使うxmlデータを確認しておくね。

サンプルXMLデータ(3) sample3.xml

<?xml version="1.0" encoding="utf-8" ?>
<manyo>
  <poem no="0028" poet="持統天皇">春過ぎて夏来るらし白たえの衣干したり天の香具山</poem>
  <poem no="1616" poet="笠郎女">朝ごとに我が見る宿のなでしこの花にも君はありこせぬかも</poem>
  <poem no="4516" poet="大伴家持">新しき年の初めの初春の今日降る雪のいやしけ吉事</poem>
</manyo>

さらら: あら、久しぶりに万葉集からとってきたサンプルデータね。manyo(万葉)という名前の要素の子要素にpoem(歌)という名前の子要素が3つあるのね。で、poem(歌)には、no(歌番号)とpoet(歌人)の2つの属性があるってことね。

たけち: そうだね。


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

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

さらら: はい。

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

19
20
21
22
23

require "rexml/document"
require "kconv"

xml_file_name = "sample3.xml"

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

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

sample = doc.root
sample.elements.each { |poem|
    print("-- poem要素の属性 \n")
    poem.attributes.each { |name, value|
      print(" ", name.tosjis, " = ", value.tosjis, "\n")
  }

    print("-- poem \n")
    print(" ", poem.text.tosjis, "\n")

}

さらら: sttributes.eachメソッドは、16行目にあるわ。

たけち: そうだね。14〜23行目で各poem要素を処理しているね。そのpoem要素の属性、nameとvalueを取得して表示している箇所が、16〜18行目だね。

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


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

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

さらら: はい。

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

さらら: 属性名"no"、"poet"とそれぞれの値が表示されてるわ。

たけち: そうだね。これで属性の見方も分かったよね。

さらら: えぇ。属性も意外に簡単にできるのね。Rubyなら本当に簡単なのね。

たけち: よかった。じゃあ、今回はここまでにしておくね。おつかれさま。

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

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


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