Javaにはいくつかの異なるXMLテクノロジーがあり、それらはすべて基本的に同じことを実行します(XMLツリーへの何らかのアクセス方法を提供します)が、それらはすべてほとんど異なる方法で行われます。
元の手法であるSAXは、ストリーミングXMLプロセッサです。単純に、パーサーを起動すると、パーサーはさまざまなXML要素に遭遇したときにコードにコールバックを作成します。ここで重要なのは、XML要素ではなくXML要素を処理しているということです。つまり、ORDER要素やITEM要素ではなく、新しいXML要素(任意のXML要素)またはテキストのブロックがいつ表示されるかを通知します。SAXはトークンレベルのすぐ上でXMLを認識します。実際にそのツリーからメモリ内表現を構築するのは、プログラム次第です。
次はDOMです。ドメインオブジェクトモデル。これは、Web開発者によく知られている手法です。XMLドキュメント全体をメモリに取り込むことから始まり、SAXとは異なり、メモリ内モデルへの参照(ノードと他のノードへのポインタの組み合わせ)を返します。DOMツリーを簡単に歩いて情報を見つけることができますが、これは一般的なモデルです。DOMモデルの利点は、ドキュメント全体を1つの形式で取得できることです。欠点は、ドキュメント全体を1つの形式で取得できることです。小さいドキュメントには適していますが、巨大なドキュメントにはあまり適していません。
もちろん、それはすべてあなたがドキュメントから何を望むかに依存します。ドキュメントのすべての情報が本当に必要な場合は、すべてをメモリにロードすることもできます。サブセットのみが必要な場合は、特に大きなドキュメントの場合、ストリーミングプロセッサの方が優れたソリューションになる可能性があります。
同じく組み合わせは、ストリーミングされたXMLドキュメントに基本的に「DOM」のようなビューを与えるStAXと呼ばれるテクノロジーです。つまり、DOMドキュメントと同じようにXMLドキュメントを操作できますが、パーサーは抽出する情報を遅延ロードするため、全体的なメモリへの影響を減らすことができます。つまり、上記の2つの手法を組み合わせたものです。
DOMとStAXの両方で、「XPath」と呼ばれるデータにアクセスするために利用できる手法があります。XPathは、個々の要素へのアクセスを提供するクエリ言語ですが、宣言的な方法で行われます。XPathは、ハードディスク上のファイル名パスと同じように考えることができます。XPathがないと、XMLドキュメントのルートから開始し、ツリーを「クロール」して情報にアクセスして抽出する必要があります。XPathはこのプロセスを抽象化し、特に大きなドキュメントのサブセットを探している場合に、XMLドキュメントのノイズの多くを回避するのに役立ちます。
最後に、Javaには、XMLバインディングテクノロジーである「JAXB」と呼ばれるテクノロジーがあります。これは、JavaクラスをXMLとの間でマップするために使用されます。システムをXMLドキュメントに向けると、Javaクラスが返されます。または、Javaクラスインスタンスをシステムに向けると、XMLを取り戻すことができます。基本的なケースでは、特にJavaクラスと結果のXMLの両方を制御できる場合、JAXBは非常に使いやすいと思います。また、JAXBに似たサードパーティのXMLバインディングシステムもありますが、JAXBにはJava6が付属しています。
どれが必要かについては、それは本当にあなた次第です。
実際に使用するのは少し面倒なので、今日ほとんどの人はSAXを避けています。高速で安価ですが、プログラマーとしては時間がかかる場合があります。
DOMとXPathは、特に最新のWebページプログラミングやブラウザーがXMLでどのように機能するかに似ているため、今日最も一般的な手法である可能性があります。小さいドキュメント(50〜100K未満)がある場合、特にデータのサブセットのみが必要な場合は、DOMとXPathは非常に機能的で、簡単に使用できます。
より高いレベルで作業することを計画していて、ドキュメント全体を操作する必要がある場合、およびXMLの読み取りと書き込みを行う必要がある場合は、JAXBが役立つ可能性があります。私の唯一の懸念は、レガシーXMLドキュメントのクラスへのマッピングが少し複雑であり、それを実行しようとしても早期に成功しない可能性があることです。
これらのすべてに利用可能な優れたガイドがあり、リンクは提供しません。むしろ、このガイドを使用して、アプリケーションに最も適していると思われる特定のXMLテクノロジーに焦点を当て、そこから進むことができます。