2012年12月22日

commonsのdigesterを使用してXMLロード

今更感は否めないが、Javaのapache commons-digesterを使用して、
XMLファイルの読み込みを作成してみた。(バージョンは1.8)

XMLを読み込むには読込ルールが必要で、
それをコーディングもしくは外部ファイル(XML)で定義することになる。

やはり、外部ファイルだろうということで、そちらを選択した。

書き方はいくつかのサイトで紹介されている。
例えば、、、
http://www.syboos.jp/java/doc/xml-to-java-object-by-digester.html
http://www.h7.dion.ne.jp/~s_wat/jakarta/digester.html

ということで、少し詰まったところを以下に残すことにする。

・特定のタグが来たら、タグのテキスト(Body)を引数にして指定のメソッドを呼ぶ





ここでは、"tag/item/value"という構成のタグが出たら、
"addItemValue"というメソッドを実行するようにしている。
詰まったのは、paramcountのところだ。
このattributeを付けないと、引数無しのメソッドが呼ばれてしまう。
paramcountだから引数の数かと思って1とすると、それも外れ。(確か、タグのattributeの1つめを引数にしようとする、、だったような)
正解の0を指定すると、タグのテキストを引数としてくれる。
なんだか直感的には分かりにくい。

・ルールファイルと対象のXMLファイルを読み込む

FileInputStream ruleIn= new FileInputStream(rulePath);
Digester digester = DigesterLoader.createDigester(new InputSource(ruleIn));

FileInputStream queryIn = new FileInputStream(queryPath);
Utsuwa info = (Utsuwa) digester.parse(queryIn);


いくつかのサイトで書かれていたDigesterオブジェクトを作る方法がdeprecatedになっていた。
"createDigester(new File("sampleRule.xml").toURL())"の"toURL()"が。
なんてことはないが、代わりに上のようにすれば動く。


なんといってもメリットは、XML読み込みがルールファイルのみで柔軟に変更できることだろう。
構造が多少変わっても、ルールを変えるだけで済む。

以上とします。
ラベル:java
posted by Thoughter at 17:47| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。