XMLプログラミング
XMLパーザーとは
XML とJavaに共通するのはプラットフォームに依存しないという点である。Javaのコンセプトとして「WriteOnece、RunAnywhere」が 有名だが、XMLも「WriteOnce、UseAnywhere」である。つまり、プログラミング言語にはJavaを、データ記述言語にはXMLを選択 することにより、あらゆる環境で稼動するアプリケーションを開発することができる。JavaはXMLを扱うクラスライブラリが用意されており,JAXP等 が標準でSDKに入っている.とくに文書の解析をする「パーザー」はその根本をなす重要なクラスといえよう.
XMLパーザーには,
- DOM
- SAX
の2つのアプローチがある.DOM は XML 文書のツリー構造の全体をメモリ上に保持する。実装時に多くのプロセッサ・パワーとメモリを必要とするため、 DOM は一般的な小規模の Web アプリケーションでは扱いづらい欠点がある.SAX は、 DOM のようにツリー構造をメモリ上に持つことはできない。その代わり、 XML 文書を一連のイベントの集まりとしてとらえているのである。例えば、 XML 文書のパースを実行していき、個々の要素の開始タグや終了タグを見つけるたびにアプリケーションに通知するといった具合だ。この仕組みにより、 SAX は高速読み取りが可能な軽量 API となっている。こうしたイベント駆動型の文書処理は、オブジェクト指向開発やサーバ・サイド開発に携わる多くの Java プログラマーにとっては親しみやすいとは言えない。また、 SAX は XML 文書の部分的な修正や、文書中の各所に対してランダム・アクセスを行う機能を備えていない。
以下、Java標準のライブラリとサードパーティのライブラリを使う方法があります。
標準編
~準備中~
Documentクラスの内容をStringに変換する(XMLデータをStringに格納する)
import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; StringWriter sw = new StringWriter(); TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(sw)); //ここでのdocがDocumentクラスです String xmlString = sw.toString();
サードパーティ:JDOM編
JDOMについては、当初は扱いやすいパーザーとして本研究室で比較的早く使ってきましたが、最近はあまり使ってないので情報は古いかもしれません。
サードパーティ:
- CyberNeko HTML Parser ・・・ シンプルなHTMLパーサーで精度がいいらしいです(未確認)。