たのしいXML: RubyでXMLデータを扱う (8) XMLファイルを生成・出力する
sample7.rb

2007年11月18日(日)更新


■新たに生成したXMLデータをXMLファイルとして出力(sample7.rb)

たけち: 前回は入力XMLデータを元にして、XMLファイルに出力してみたね。今回は、まったく新しく生成したXMLデータをファイル出力してみるね。

さらら: 難しそうね。

たけち: 心配ないよ。まずは、要素がひとつだけの簡単なXMLデータを生成して、XMLファイルとして出力する簡単な例を作ってみるね。

さらら: はい。


■生成するXMLデータ

たけち: 生成するXMLデータとXMLファイルの内容は次のようなものだよ。

生成するXMLデータ

さらら: sample7という名前の要素がひとつで、テキストが「sample7: サンプルデータです。」となっているのね。

たけち: そうだね。これをREXMLでどう生成してゆくかを図で説明するね。

XMLデータの生成手順

さらら: 最初にDocumentを生成してから、順に要素やテキストノードを追加してゆくのね。

たけち: そうだよ。じゃ、具体的なソースコードの例を見てみよう。

さらら: はい。


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

Rubyサンプルプログラム(7) sample7.rb
01
02
03
04
05
06
07
08
09
10
11

12
13
14
15
16
17

require "rexml/document"

out_file_name = "sample7_out.xml"

out_doc = REXML::Document.new()
out_doc.add(REXML::XMLDecl.new(version="1.0", encoding="SHIFT_JIS"))

root_element = REXML::Element.new("sample7")
out_doc.add_element(root_element)

root_element.add_text("sample7: サンプルデータです。")


File.open(out_file_name,"w") do |outfile|

    out_doc.write(outfile, 0)

end


※ここでは、文字コードをutf-8としてsample7.rbを作成しています。


■処理の概要

さらら: えぇ〜と。。。

たけち: 5行目から11行目で、out_docにXMLデータを生成しているんだけど、簡単に見てゆこうね。

さらら: はい。

  • 5行目: out_doc = REXML::Document.new()
            Documentを生成
  • 6行目: out_doc.add(REXML::XMLDecl.new(version="1.0", encoding="SHIFT_JIS"))
            DocumentにXML宣言を追加
  • 8行目: root_element = REXML::Element.new("sample7")
            sample7要素を生成
  • 9行目: root_element = REXML::Element.new("sample7")
            Documentにsample7要素を追加
  • 11行目: root_element.add_text("sample7: サンプルデータです。")
            Documentにsample7要素にテキストを追加

さらら: 図と見比べながらみると分かるわ。

たけち: 13行目から17行目で、out_docをファイルとして出力しているけど、これは前回と同じだからわかるよね。

さらら: はい。


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

たけち: じゃ、このsample7.rbを実行した結果をみてみよう。コマンドプロンプトウィンドウで

  • ruby sample7.rb

と入力してみて。

さらら: はい。

さらら: "sample7_out.xml"というファイルができたわ。

たけち: ちゃんと実行できたみたいだね。じゃあ、"sample7_out.xml"ファイルの内容を見てみよう。

出力したXMLデータ sample7_out.xml

<?xml version='1.0' encoding='SHIFT_JIS'?>
<sample7>sample7: サンプルデータです。</poem> </sample7>

さらら: 確かにXMLファイルができているわ。

たけち: ごく簡単なREXML::Documentの例だったけど、使い方が少しわかったかな。

さらら: えぇ、少し、だけね。

たけち: 次回からは、もっと複雑なものを作ってみようね。

さらら: あっ、はい。

たけち: じゃ、今回はここまで。

さらら: は〜い。

 → 次回は属性を追加する sample8.rbです。 (^ ^;


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