たのしいXML: RubyでXMLデータを扱う (7) XMLファイルを出力する
sample6.rb

2007年10月28日(日)更新


■入力したXMLデータをそのままXMLファイルとして出力(sample6.rb)

たけち: 前回までは、入力したXMLデータの要素や属性を見てきたけど、今回は入力XMLデータを元にして、XMLファイルに出力してみよう。

さらら: あっ、はい。

たけち: 今回は、要素などの処理はしないで、入力したXMLデータをそのままXMLファイルとして出力する簡単な例を作ってみるね。

さらら: ということは、入力したXMLファイルと内容が同じXMLファイルを作るのね。


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

たけち: そうだよ。じゃあ、早速だけど、今回はまずRubyスクリプトの例をみてみよう。XMLファイルを出力する箇所を中心に説明するからね。

さらら: はい。

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

require "rexml/document"

xml_file_name = "sample4.xml"

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

File.open("out.xml","w") do |outfile|

  out_doc = REXML::Document.new()
  out_doc << REXML::XMLDecl.new()
  out_doc << doc.root

  out_doc.write(outfile, 0)
end


■処理の概要

さらら: えぇ〜と。。。

たけち: 10行目から17行目で、

  1. 出力XMLファイル名 = out.xml

のXMLファイルを出力しているんだよ。処理の概要を次の図に載せておくね。

さらら: はい。

XMLファイルの出力例


■REXML::XMLDecl.new

たけち: だいたい分かると思うけど、ここではREXML::XMLDecl.newについて少しだけ詳しくみておくね。

さらら: はい。

たけち: REXML::XMLDecl.newは、次のようなパラメタが指定できるんだ。

  • REXML::XMLDecl.new(version, encoding, standalone)
    1. version    : XML規格バージョン番号 (デフォルトは、"1.0")
    2. encoding  : 文字コード名 (デフォルトは、"UTF-8")
    3. standalone : スタンドアローン (デフォルトは、"no")

さらら: ここのサンプルプログラムには何もパラメタが書かれていないわよ。

たけち: その場合は、すべてデフォルト値が設定されるんだよ。

さらら: あっ、そうなのね。


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

たけち: じゃ、このsample6.rbを実行した結果をみてみよう。入力ファイルは前に使ったsample4.xmlが必要だよ。コマンドプロンプトウィンドウで

  • ruby sample6.rb

と入力してみて。

さらら: はい。

サンプルプログラムsample6.rbの実行

サンプルプログラムsample6.rbの実行

さらら: あら、なんにも表示されないわ。

たけち: あっ、それでいいんだよ。プログラムでは特に何もprintfなど、していないからね。実行したフォルダを表示してみると、"out.xml"というファイルができているはずだよ。

さらら: えっ〜、と。。。あっ、ほんとう。

たけち: 内容を見てみよう。

出力したXMLデータ out.xml

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

さらら: あ、入力したXMLファイルと内容がいっしょだわ。

たけち: REXML::Documentの内容は特に変更などしなかったけど、XMLファイルの生成のイメージが少しつかめたかな?

さらら: 少し、だけね。

たけち: 次回からは、もっとREXML::Documentの内容に踏み込んでみようね。

さらら: あっ、はい。

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

さらら: は〜い。

 → 次回はXMLファイルを生成・出力する sample7.rbです。 (^ ^;


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