たのしいXML: RubyでXMLデータを扱う (14)
URIを指定してXMLファイルを読む sample14.rb

2008年03月30日(日)更新


■URIを指定してXMLファイルを読む(sample14.rb)

たけち: 前回までは、PCのディスクにあるXMLファイルを読んできたね。

さらら: えぇ。そうだわね。

たけち: 今回からは、インターネット上に存在するXMLファイルを読み込んで処理することを学んでみよう。

さらら: あら、そんなことができるの。

たけち: そう。そのためには、これまでは使わなかった、

  • open-uri ライブラリ
を使うんだ。


■読み込む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


■RubyでのURIアクセス方法

たけち: これで、sample1.xmlファイルがhttp://www6.airnet.ne.jp/manyo/xml/ruby/ruby_xml/sample1.xmlにあることが確認できたね。

さらら: はい。

たけち: じゃ、RubyでのURIアクセス方法の例を説明しておくね。図をみてね。

RubyでのURIアクセス方法

  1. require "open-uri" で open-uriライブラリを読み込む
  2. open(uri) で 指定したuriにアクセスする
  3. rescue で エラー時の処理を記述する

さらら: あっ、意外に簡単なのね。でも、具体的には、アクセスした後はどうしたらいいの?


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

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

Rubyサンプルプログラム(14) sample14.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

require 'open-uri'
require 'kconv'

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

begin
# uriにアクセスし、内容を表示
    open(uri) { |f|
        f.each_line { |line|
            print(line.tosjis)
        }
    }


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

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


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

たけち: 10〜14行目までで、URIにアクセスし、読み込んだデータを一行ずつで表示しているよ。

さらら: あっ、なるほど。今回のサンプルではXMLファイルとしての取り扱いはしていないのね。

たけち: そうそう。それは、次回からね。

さらら: はい。


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

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

  • ruby sample14.rb

と入力してみて。

sample14.rbの実行結果確認

さらら: はい。。。。。。あっ、ファイルの内容がちゃんと表示されたわ。

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

さらら: これだと、人が作ったXMLファイルも見ることができるわね。

たけち: そうだね。じゃ、今回はここまで。次回から、REXMLを使って処理してみよう。

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

 → 次回はURI指定のXMLファイルをREXMLで処理 sample15.rbです。(^ ^;


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