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