2007年10月07日(日)更新 |
■入力XMLファイルのエラーチェック(sample5.rb)
たけち: 今回は入力XMLファイルのエラーチェックの仕方をみておこうね。 さらら: あっ、そういえばこれまでは入力するXMLファイルが必ず正しいものとした処理をしていたわね。 たけち: そうだよね。XMLファイルの記述ミスがあったりしたときには、REXML:ParseExceptionというエラーが発生するんだ。今回はそのエラーが起きたときのRubyでの書き方を学んでおこうね。同時に、読み込むXMLファイルをパラメタとして入力できるようにもしたいね。 さらら: それを知っておくとこれからも安心だわね。 たけち: そうだよ。じゃあ、早速だけど、今回はまずRubyスクリプトの例をみてみよう。 さらら: はい。 |
■Rubyサンプルプログラム(5) sample5.rbのソースコード
たけち: ここでsample5.rbのソースコードを載せておくね。 さらら: はい。 |
行 | Rubyサンプルプログラム(5) sample5.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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
require "rexml/document" |
■処理の概要
さらら: ああら、ちょっと長いわね。それにどこからみていっていいか分からないわ。 たけち: 大きくは次の二つのことをやっているんだ。
で、処理は、 ##### main処理ですす # XMLファイル名を取得します と書かれている行(コメントの行)の次の行、21行目 xml_file_name = ARGV[0] から始まっているよ。 さらら: そうなんだ。 たけち: 処理の概要を次の図に載せておくね。 さらら: はい。 |
■入力パラメタの取得
たけち: まずは、入力パラメタの取得だよ。 さらら: はい。 たけち: 21行目の さらら: 起動時のパラメタって? たけち: たとえば さらら: あっ、はい。わかったわ。 たけち: で、もし さらら: そうなんだ。でも、そのgetXMLFileNameという名前のファンクションではいったい何をしているの? たけち: ユーザにXMLファイル名を入力してもらう処理をしているんだ。その様子を次の図に示すね。 |
たけち: 入力したファイル名をfnameという変数に格納して、呼び元に渡しているんだよ。 さらら: ということは、xml_file_nameに読み込みたいXMLファイル名が入るのね。 たけち: そうだね。 |
■rescueでエラーを捕まえる(入力XMLファイル名のパースチェック)
たけち: XMLファイルの読み込み処理全体は、32-49行目(begin 〜 end)で行っているんだけど、エラーが発生したときの処理は、41-47行目で行っているんだよ。 さらら: コメントには、「 パースエラーが発生したとき」と「ファイルの読み込みエラーなどが発生したとき」の二つがあるけど?? たけち: 少し詳しく図にしておくね。 |
たけち: それぞれ、rescueという文があるんだけど、それでパースエラーREXML::ParseException、その他のエラーExceptionが発生したときの処理を書いているんだよ。 さらら: へえ〜。じゃあ、エラーが無かったときは、その部分は処理されないのね。 たけち: そうなんだよ。 |
■サンプルプログラムsample5.rbの実行結果の確認
たけち: じゃ、このsample5.rbを実行した結果をみてみよう。正しいファイルは前に使ったsample1.xmlを使ってみよう。で、間違いを含んだXMLファイルとして次のerro_sample.xmlを使ってみよう。 |
エラーサンプルXMLデータerror.xml |
---|
<?xml version="1.0" encoding="utf-8" ?> |
さらら: えっ〜と。。。要素の開始タグの名前と終了タグの名前があっていないのでエラーなのね。 たけち: そう、じゃ、サンプルプログラムsample5.rbを使ってsample1.xmlとerror.xmlを読んでみよう。 さらら: はい。 |
さらら: sample1.xmlを読んだときは、 「---エラーはありませんでした」 ってメッセージが表示されるだけね。で、error.xmlのときは、たくさんメッセージが出てるわ。 たけち: error.xmlのときは、サンプルプログラムが表示している 「p--- パースエラーです」 というメッセージの後にたくさんのメッセージか表示されているね。これは、43行目の さらら: そうなんだ。これを見ると、図に示しているみたいに、開始タグ名と終了タグ名が一致していないことが分かるわけね。 たけち: そうそう。これで入力XMLファイルのエラーチェックの仕方がだいたいわかったかな。 さらら: えぇ。ありがとう。わかったわ。 たけち: じゃ、今回はここまでね。 さらら: は〜い。 → 次回はXMLファイルを出力するです。 (^ ^; |