XMLから読み込んだ情報を更新した場合に、それをXMLのファイルへ反映する方法についても簡単に取り上げておきます。
DOMの場合、設定情報をDOMのツリーに反映させたうえで、それをXMLのファイルにシリアライズすればよいだけでした(前々回の「DOMプログラムの実例」を参照)。
SAXの場合、DOMのツリーにあたるものがありません(当然ですが)。どうすればよいのでしょうか? 実際のところ余り深く考える余地はありません。ストレートに、自前でXMLのファイルを書き出すということになるでしょう。
DOMの場合は、ツリーの構造をもとにVisitorパターンなどを用いてXMLのファイルを書き出す処理を1つ用意するだけでした(JAXP 1.1の場合は、自分で書く必要すらありません)。SAXの場合は、DTDの形式に合わせて毎度書くことになります。
例えば、JDBCの接続情報をもとにXMLを書き出すコードはリスト6のようになります。
System.out.println("<connection>"); System.out.println(" <driver>" + driver + "</driver>"); System.out.println(" <url>" + url + "</url>"); …… System.out.println("</connection>");
メニューの例については、皆さんへの宿題としておきましょう。ヒントは、menuの構造に着目して再帰的にタグを書き出す処理を考えることです。
XMLファイルを直接書き出すというこのアプローチですが、Java Servletを少し書いたことのある方にはおなじみかもしれません。JSPなどを用いずにHTMLページを生成する場合、リスト6のような形でタグを書き出すという処理が必要になってきます。正直いってこのようなコードは、面倒でかつ保守がしづらいものになりがちです。このような処理に関してのデザインパターンなども研究されているようですから、そういった知見を活用することも有効です。
5回にわたり、Javaを用いたDOM/SAXプログラミングについて解説してきたこの連載も、SAXプログラミングの応用について取り上げた今回で終わりです。
実際にDOMやSAXのプログラミングを行ってみた読者の皆さんの感想はどのようなものでしょうか? DOMのツリーの操作に閉口したり、イベントの発生順序に頭を悩ませた方も少なくないかもしれません。
DOMやSAXはXMLを操作する上で最もプリミティブなインターフェイスです。今後、これらを抽象化して利用するための記述が実用化されていくでしょう(例えば、XML SchemaやJava Architecture for XML Bindingなど)。しかし、根底にあるDOMやSAXという技術を理解しておくことは、これらの技術を適用、理解するうえで非常に有効です。この連載を機会に、DOMとSAXのエッセンスを吸収し、わが身のものとしていただくことを願ってやみません。
それでは、機会があればまたお会いしましょう。
Copyright © ITmedia, Inc. All Rights Reserved.