1) DOM (JAXP Crimson パーサー)
DOM は、プラットフォームや言語に依存しない方法で XML ドキュメントを表現するための公式 W3C 標準です。 DOM は、階層構造で編成されたノードまたは情報の集合です。この階層により、開発者はツリーで特定の情報を検索できます。この構造を分析するには、通常、作業を行う前にドキュメント全体をロードし、階層を構築する必要があります。 DOM は情報階層に基づいているため、ツリーベースまたはオブジェクトベースとみなされます。 DOM、および一般にツリーベースの処理には、いくつかの利点があります。まず、ツリーはメモリ内に永続的であるため、アプリケーションがデータと構造を変更できるように変更できます。また、SAX のような 1 回限りのプロセスではなく、いつでもツリーを上下に移動できます。 DOM の使用も非常に簡単です。
2) サックス
SAX 処理の利点は、ストリーミング メディアの利点と非常に似ています。すべてのデータが処理されるのを待つことなく、すぐに分析を開始できます。また、アプリケーションはデータの読み取り時にデータをチェックするだけなので、データをメモリに保存する必要はありません。これは、大きなドキュメントにとって大きな利点です。実際、アプリケーションはドキュメント全体を解析する必要さえなく、特定の条件が満たされた場合に解析を停止できます。一般に、SAX は、それに代わる DOM よりもはるかに高速です。
DOMかSAXか? XML ドキュメントを処理するために独自のコードを記述する必要がある開発者にとって、DOM または SAX 解析モデルの選択は非常に重要な設計上の決定です。 DOM はツリー構造を使用して XML ドキュメントにアクセスしますが、SAX はイベント モデルを使用します。
DOM パーサーは、XML ドキュメントをそのコンテンツを含むツリーに変換し、ツリーをトラバースできます。 DOM を使用してモデルを解析する利点は、開発者がツリー構築命令を呼び出すだけで済み、ナビゲーション API を使用して必要なツリー ノードにアクセスしてタスクを完了するだけで済むことです。ツリー内の要素は簡単に追加および変更できます。ただし、DOM パーサーを使用する場合は XML ドキュメント全体を処理する必要があるため、特に大きな XML ファイルを処理する場合には、パフォーマンスとメモリの要件が比較的高くなります。 DOM パーサーは、そのトラバーサル機能により、XML ドキュメントを頻繁に変更する必要があるサービスでよく使用されます。
SAX パーサーはイベントベースのモデルを使用し、XML ドキュメントを解析するときに一連のイベントをトリガーし、指定されたタグが見つかったことをメソッドに通知します。 SAX では、開発者が処理するタグを決定できるため、通常、メモリ要件が低くなります。特に、開発者がドキュメントに含まれるデータの一部のみを処理する必要がある場合、SAX のスケーラビリティがよりよく反映されます。ただし、SAX パーサーを使用する場合はコーディングがさらに難しくなり、同じドキュメント内の複数の異なるデータに同時にアクセスすることが困難になります。
3) JDOM http://www.jdom.org
JDOM の目的は、XML との対話を簡素化し、DOM を使用して実装するよりも高速な Java 固有のドキュメント モデルであることです。 JDOM は、最初の Java 固有のモデルになって以来、盛んに推進されてきました。最終的には、「Java 仕様要求 JSR-102」を通じて「Java 標準拡張」として使用することが検討されています。 JDOM の開発は 2000 年代初頭から始まりました。
JDOM と DOM には主に 2 つの違いがあります。まず、JDOM は具象クラスのみを使用し、インターフェイスは使用しません。これにより、API がいくつかの点で簡素化されますが、柔軟性も制限されます。第 2 に、API は Collections クラスを広範囲に利用しており、これらのクラスにすでに精通している Java 開発者にとっての使用が簡素化されています。
JDOM のドキュメントには、その目的は「20% (またはそれ以下) の労力を使って Java/XML の問題の 80% (またはそれ以上) を解決する」ことであると記載されています (学習曲線に基づいて 20% と仮定します)。 JDOM は確かにほとんどの Java/XML アプリケーションにとって便利であり、ほとんどの開発者は API の方が DOM よりもはるかに理解しやすいと感じています。 JDOM には、ユーザーが XML で意味をなさないことを行うことを防ぐために、プログラムの動作に関するかなり広範なチェックも含まれています。ただし、基本以上のことを行うには、XML を十分に理解している必要があります (場合によってはエラーも理解する必要があります)。これは、DOM や JDOM インターフェイスを学ぶよりも有意義な作業かもしれません。
JDOM 自体にはパーサーは含まれていません。通常、SAX2 パーサーを使用して入力 XML ドキュメントを解析および検証します (ただし、以前に構築された DOM 表現を入力として受け取ることもできます)。これには、JDOM 表現を SAX2 イベント ストリーム、DOM モデル、または XML テキスト ドキュメントに出力するコンバータが含まれています。 JDOM は、Apache ライセンスのバリアントに基づいてリリースされたオープン ソースです。
4) DOM4J http://dom4j.sourceforge.net
DOM4J は完全に独立した開発ですが、元々は JDOM のインテリジェント フォークでした。これには、統合された XPath サポート、XML スキーマ サポート、大規模ドキュメントまたはストリーミング ドキュメントのイベントベースの処理など、基本的な XML ドキュメント表現を超える多くの機能が組み込まれています。また、DOM4J API および標準 DOM インターフェイスを介した並列アクセス機能を備えたドキュメント表現を構築するためのオプションも提供します。 2000 年後半から開発が進められてきました。
これらすべての機能をサポートするために、DOM4J はインターフェイスと抽象基本クラス メソッドを使用します。 DOM4J は API で Collections クラスを多用しますが、多くの場合、パフォーマンスの向上やより直接的なコーディング アプローチを可能にする代替手段も提供します。直接的な利点は、DOM4J はより複雑な API の代償を払っていますが、JDOM よりもはるかに優れた柔軟性を提供することです。
DOM4J の目標は、柔軟性、XPath 統合、大規模ドキュメントの処理を追加しながら、Java 開発者にとっての使いやすさと直感的な操作という JDOM の目標と同じです。また、JDOM よりも完全なソリューションとなることも目指しており、本質的にすべての Java/XML 問題を処理するという目標を達成します。その目標を達成する一方で、アプリケーションの不正な動作の防止には JDOM ほど重点を置いていません。
DOM4J は、優れたパフォーマンス、強力な機能、そして非常に使いやすい、非常に優れた Java XML API です。また、オープンソース ソフトウェアでもあります。最近では、XML の読み書きに DOM4J を使用する Java ソフトウェアが増えています。特に、Sun の JAXM も DOM4J を使用していることは注目に値します。
2...比較する
1) DOM4J は最高のパフォーマンスを持っています。Sun の JAXM も DOM4J を使用しています。たとえば、有名な Hibernate も DOM4J を使用しています。移植性が問題にならない場合は、DOM4J を使用してください。
2) JDOM と DOM はパフォーマンス テスト中にパフォーマンスが低下し、10M ドキュメントのテスト中にメモリ オーバーフローが発生しました。小さなドキュメントの場合は、DOM と JDOM の使用を検討する価値があります。JDOM の開発者は、正式リリース前にパフォーマンスの問題に重点を置く予定であると述べていますが、パフォーマンスの観点からは、実際には推奨できるものは何もありません。さらに、DOM は依然として非常に優れた選択肢です。 DOM 実装は、多くのプログラミング言語で広く使用されています。これは、他の多くの XML 関連標準の基礎でもあり、(非標準ベースの Java モデルとは対照的に) W3C によって公式に推奨されているため、特定の種類のプロジェクト (たとえば、 JavaScript の DOM)。
3) SAX のパフォーマンスが向上しますが、これはその特定の解析方法 (イベント駆動型) に依存します。 SAX は受信 XML ストリームを検出しますが、それをメモリにロードしません (もちろん、XML ストリームが読み取られるとき、一部のドキュメントはメモリ内に一時的に隠蔽されます)。
3. 4つのXML操作メソッドの基本的な使い方
XML ファイル: