たのしいXML: RubyでXMLデータを扱う (15)
URI指定のXMLファイルをREXMLで処理 sample15.rb

2008年04月13日(日)更新


■URI指定のXMLファイルをREXMLで読む(sample15.rb)

たけち: 前回はインターネット上に存在するXMLファイルを読んでみたね。

さらら: えぇ。ただ、REXMLは使っていなかったわね。

たけち: そう。単にテキストファイルとして読んだだけだったね。今回は、インターネット上に存在するXMLファイルを読み込んでREXMLで処理することを学んでみよう。

さらら: はい。


■読み込むXMLファイル

たけち: 読み込みXMLファイルは前回と同じ"sample1.xml"を使うね。

  • 読み込みXMLファイル名 = sample1.xml

さらら: はい。

サンプルXMLデータ(1) sample1.xml

<?xml version="1.0" encoding="utf-8" ?>
<sample>サンプル_1です</sample>

たけち: このXMLファイルを前回と同じ、次のURIに配置しておくね。確認のために、URIをクリックしてみて。

さらら: はい。あっ、「サンプル_1です」のテキストを持ったXML(sample1.xml)が表示されたわ。これも前回と同じね。

sample1.xml


■URIアクセスとREXMLでの処理方法

たけち: RubyでのURIアクセス方法は前回と同じだよ。ここでは、それをREXMLでどう処理するかの基本を示しておくね。基本的には、ローカルファイルのときと同じだよ。

URIアクセスとREXMLでの処理方法

  1. require "open-uri" で open-uriライブラリを読み込む
  2. require "rexml/document" で rexml/documentライブラリを読み込む
  3. open(uri) で 指定したuriにアクセスする
  4. open(uri) で読み込んだファイルを指定して、REXML::Documentオブジェクトを生成する
  5. REXML::Documentを処理する
  6. rescue で エラー時の処理を記述する

たけち: 前回と違うところはどこかわかるよね。

さらら: えぇ。4番目の「open(uri) で読み込んだファイルを指定して、REXML::Documentオブジェクトを生成する」ってところね。

たけち: そうだね。それと、2番目の「require "rexml/document" で rexml/documentライブラリを読み込む」も忘れないようにね。

さらら: あっ、はい。


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

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

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

16
17
18
19
20
21
22
23
24
25
26

require 'open-uri'
require 'rexml/document'
require 'kconv'

# URIを設定
uri = 'http://www6.airnet.ne.jp/manyo/xml/ruby/ruby_xml/sample1.xml'
print("uri = ", uri, "\n\n")

begin
# uriにアクセスし、REXMLでDocument内容を表示
    open(uri) { |f|
          doc = REXML::Document.new(f)
         sample = doc.root

         print("root element name = ", sample.name, "\n")
         print("root element text = ", sample.text.tosjis, "\n")

    }

# エラー処理
    rescue SocketError
        puts "SocketError: 接続エラー #{uri}"
        exit

    rescue OpenURI::HTTPError
        puts "HTTPError: 見つかりません: #{uri}"
        exit
end


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

たけち: 12行目で、URIでopenしたファイル、ここでは、"f"を指定して
        doc = REXML::Document.new(f)
としているところに注目してね。でも、これは、ローカルファイルのときとまったく同じなんだけどね。

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


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

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

  • ruby sample15.rb

と入力してみて。

sample15.rbの実行結果確認

さらら: はい。。。。。。あっ、XMLドキュメントの要素名とテキスト内容がちゃんと表示されたわ。

たけち: ちゃんと実行できたみたいだね。

さらら: インターネット上のXMLファイルもローカルファイルと同じように処理できることがわかったわ。

たけち: そうだね。じゃ、今回はここまで。

さらら: あっ、はい。ありがとね。

 → 次回はGUIライブラリを使う(1) 準備です。(^ ^;


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