しばらくの間、小さなxmlドキュメントを解析するためにDOMを使用してきました。JAXBについて読む( http://www.Oracle.com/technetwork/articles/javase/index-140168.html )、DOMのJAXB instaedを使用する予定です。
これが正しいアプローチかどうかを教えてください。
JAXBは、DOMおよびSAXと直接比較できません。 Java DOMおよびSAX解析APIはXMLドキュメントを解析するための低レベルAPIであり、JAXB(XMLバインディング用Java API)はXML要素および属性を=に変換するための高レベルAPIです。 Javaオブジェクト階層(およびその逆)。JAXBの実装では、XML入力データの実際の解析を行うために、バックグラウンドでDOMまたはSAXパーサーを使用する可能性が高くなります。
多くの場合、XMLドキュメントのコンテンツをJavaプログラムでオブジェクトに変換する必要があります。これがやりたい場合は、おそらくJAXBが使いやすくなり、 DOMまたはSAX解析APIを使用する場合よりも少ないコードを記述する必要があります。
それがあなたのケースに適切なアプローチであるかどうかは、プロジェクトの機能的および技術的要件が何であるかによって異なります。
(〜7年遅すぎますが、それでも)
受け入れられた答えと矛盾するために、JAXBがDOMの上に実装されていることは非常に疑わしい-2つの Object Model s(JavaおよびDOM)が必要であり、 XMLバインディング (JAXBの[〜#〜] xb [〜#〜])パフォーマンス/スペースが悪い両方のモデルが相互にバックアップする必要があります。
JAXBは、JavaでXML双方向マッピングを処理するアプローチを検討する際のDOMの明確な類似物のようです。 DOMとJAXBは、IBMが [〜#〜] xom [〜#〜] と呼ぶものの単なる例です。
ほとんどすべての場合、私はDOMよりもJAXBを好み、SAXよりもハンドロールを好みます。これは主に、SAXとDOM APIの「言語に依存しない」曲がりくねったグロテスクを見つけるためです。
データセットが大きすぎてメモリに収まらない場合は、明らかにObject Modelは実行できません。さもないと
JAXB、Java XMLバインディングのアーキテクチャ。JAXBは、マーシャル(JavaオブジェクトからXML表現へ)およびアンマーシャリング(XMLコンテンツへのJavaオブジェクト)
JAXBアーキテクチャ をよく理解するには、このリンクに従ってください。
JAXBは、コード記述が少ないという意味から簡単です。ただし、解析をさらに制御する必要がある場合は、SAXパーサーを使用する必要があります。解析をより細かく制御でき、DOMパーサーよりも高速です。それとは別に、JAXBは高レベルAPIであるため、オーバーヘッドタスクがあるため、SAXより少し遅くなります。
JAXBはXPathをサポートしていません。 APIを生成するにはスキーマが必要です。未知のXMLまたは潜在的な不良XMLがある場合、プログラムは検証エラーで終了します。検証ではなく解析のみが必要な場合、エラートレラントXML処理には適していません。未知のXMLを処理したり、内部で既知のノード構造を探したりするのには適していません。複雑なXML構造のNavgationは、多くの読みにくいコードを生成します。
JAXBを使用する場合、XML構造とJavaコード。XMLが変更された場合、コードを変更してデプロイする必要があります。 XPathが外部構成にある場合、XML構造体とJavaコードを完全に分離します。