たのしいXML: RubyでXMLデータを扱う (9) 要素の属性を削除
sample9.rb

2007年12月16日(日)更新


■要素の属性を削除(sample9.rb)

たけち: 前回は要素に属性を追加する方法を学んだね。今回は逆に、要素から属性を削除する方法を学ぶね。

さらら: はい。


■読み込みするXMLファイルと出力するXMLファイル

たけち: 今回は、XMLファイルを読み込んで、それに含まれる属性を削除したものをXMLファイルとして出力してみるね。

  • 読み込みXMLファイル名 = sample9_in.xml
  • 出力XMLファイル名 = sample9_out.xml
読み込みXMLファイル sample9_in.xml

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

     ↓ poem要素のpoet属性を削除

出力XMLファイル sample9_out.xml

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

たけち: つまり、rubyでのXMLデータの処理内容は次のようなものになるね

poem要素のpoet属性を削除

さらら: manyoという名前のルート要素の下に、poem要素が3つで、pnoとpoetの2つの属性があるのね。そのなかのpoet属性を削除するのね。

たけち: そうだねそれには、Elementクラスの"delete_attribute"メソッドを使うんだよ。

さらら: わかったわ。

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

さらら: はい。


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

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

require "rexml/document"

in_file_name = "sample9_in.xml"
out_file_name = "sample9_out.xml"

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

# manyo要素
manyo = doc.root

# poem要素の"poet"属性を削除
manyo.elements.each { |poem|
    poem.delete_attribute('poet')
}

File.open(out_file_name,"w") do |outfile|
    doc.write(outfile, 0)
end


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

さらら: これは簡単ね。16行目でpoem要素のpoet属性を削除しているのね。

たけち: そうだね。今回はとっても簡単だね。

さらら: えぇ。


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

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

  • ruby sample9.rb

と入力してみて。

さらら: はい。

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

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

sample9_out.xmlの内容確認

さらら: 確かにpoet属性の無いXMLファイルができているわ。

たけち: このように、あるXMLファイルを入力にしてXMLデータを変更して出力することができるんだよね。

さらら: そうなのね。。。。。あっ、ということは、XMLファイルの変換ができる、ということなの?

たけち: そうそう。次回からは、要素の扱いなどをやってみようかな。

さらら: は〜い。

 → 次回は要素を削除する sample10.rbです。 (^ ^;


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