xsd→object→xml

■XSD→ XMLスキーマ ドキュメントの作成に使用する W3C (World Wide Web Consortium) の標準言語。

XML→ 【Extensible Markup Language】
    文書やデータの意味や構造を記述するためのマークアップ言語
(root)
(a name='a1')
(b)bbb1(/b)
(b)bbb2(/b)
(b)bbb3(/b)
(c)ccc1(/c)
(/a)
(a)
(b)bbb4(/b)
(b)bbb5(/b)
(/a)
(a name='a3' price='100'/)
(/root)


の読み込み

require 'rexml/document'
doc = REXML::Document.new(open("〜〜.xml"))

・添え字を指定していない→ 1番目のものが取られる
puts doc.elements['root/a/b'].text → bbb1

・添え字を指定する
puts doc.elements['root/a[2]/b[2]'].text → bbb5

・全Aタグの全子要素bタグ値を全部表示
doc.elements.each('root/a/b') do |element|
puts element.text
end
→ 
bbb1
bbb2
bbb3
bbb4
bbb5

・1つ目Aタグのbタグ値全部表示
doc.elements.each('root/a[1]/b') do |element|
puts element.text
end

bbb1
bbb2
bbb3

・1つ前のタグと後ろのタグ
doc.elements.each('root/a[1]/b[2]') do |element|
puts element.previous_element.text
end
→ bbb1

doc.elements.each('root/a[1]/b[2]') do |element|
puts element.next_element.text
end
→ bbb3

・タグ名取得
doc.elements.each('root/a[1]') do |element|
puts element.name
end
→ a

・タグ名取得(子要素)
doc.elements.each('root/a[1]') do |element|
puts element.elements[4].name
end
→ c

・子要素数表示
doc.elements.each('root/a[2]') do |element|
puts element.elements.size
end
→ 2

・属性値取得
doc.elements.each('root/a[3]') do |element|
puts element.attributes["name"]
end
→ a3

・属性はHashで返る
hash = Hash.new
doc.elements.each('root/a[3]') do |element|
hash = element.attributes
end
puts hash.size #=>2
puts hash["name"] #=>a3

・属性が特定値の要素を持つタグの子要素値
doc.elements.each("root/a[@name='a1']/b") do |element|
puts element.text
end

bbb1
bbb2
bbb3

・特定の属性値を持つタグの、別の属性値
puts doc.elements["root/a[@name='a3']"].attributes['price']

100

■ツール
Rails 3 XML Builder / Twilio API
・XMLBeans
・Trang

                  
■参考サイト
Rubyによるテキスト処理-IBM
http://www.ibm.com/developerworks/jp/xml/library/x-rubytextproc/