web-dev-qa-db-ja.com

Java XMLフレームワークの詳細な比較はどこにありますか?

JavaプロジェクトにXML処理フレームワークを選択しようとしていますが、名前がわかりません。XOM、JDOMなど。人気のあるすべてのプロジェクトの詳細な比較を見つけることができます。 Java XMLフレームワーク?

26
yegor256

ブレイズが指摘したように、基準に固執する。しかし、さまざまな問題/ユースケースを解決するために、期間中に作成された複数の標準があります。どちらを選択するかは、要件によって異なります。以下の比較が正しいものを選択するのに役立つことを願っています。

今、あなたが選ばなければならない2つのものがあります。 [〜#〜] api [〜#〜]およびAPIの実装 (沢山あります)

API

SAX:長所

  • イベントベース
  • メモリ効率
  • dOMよりも速い
  • スキーマ検証をサポート

SAX:短所

  • オブジェクトモデルはありません。イベントを利用して自分自身を作成する必要があります
  • Xmlの単一の解析であり、先に進むことしかできません
  • 読み取り専用API
  • xpathサポートなし
  • 少し使いにくい

DOM:長所

  • インメモリオブジェクトモデル
  • 要素の順序を保持します
  • 双方向
  • aPIの読み取りと書き込み
  • xml操作
  • 使いやすい
  • スキーマ検証をサポート

DOM:短所

  • より大きなXMLドキュメントのメモリを大量に消費します(通常、10 mb未満のXMLドキュメントに使用されます)
  • もっとゆっくり
  • 一般的なモデル、つまりノードを操作する

Stax:長所

  • SAXとDOMのベスト、つまりDOMの使いやすさとSAXの効率
  • メモリ効率
  • プルモデル
  • aPIの読み取りと書き込み
  • サブ解析をサポート
  • 1つのスレッドで複数のドキュメントを同時に読み取ることができます
  • xMLの並列処理が簡単になります

Stax:短所

  • スキーマ検証のサポートはありません(私が覚えている限り、彼らが今それを追加したかどうかはわかりません)
  • サックスのようにしか前進できない
  • xml操作なし

JAXB:長所

  • xMLを知らなくてもXMLデータにアクセスして処理できます
  • 双方向
  • dOMよりもメモリ効率が高い
  • SAXとDOMは汎用パーサーですが、JAXBはXMLSchmeaに固有のパーサーを作成します
  • データ変換:JAXBはxmlをJavaタイプに変換できます
  • オブジェクトAPIを介したXML操作をサポートします

JAXB:短所

  • 有効なXMLのみを解析できます

Trax:XSLTを使用してXMLを1つのフォームから別のフォームに変換する場合

実装

SAX、DOM、Stax、JAXBは単なる仕様です。多くの これらの仕様のオープンソースおよび商用実装 があります。ほとんどの場合、JDKまたはアプリケーションサーバーに付属しているものに固執することができます。ただし、デフォルトで提供されている別の実装を使用する必要がある場合があります。そして、ここで JAXPラッパーAPI を評価できます。 [〜#〜] jaxp [〜#〜]を使用すると、コードを変更することなく、構成を通じて実装を切り替えることができます。また、XMLドキュメントの解析、変換、検証、クエリを行うためのパーサー/仕様に依存しないAPIも提供します。

さまざまな実装のパフォーマンスとその他の比較


現在、標準は優れていますが、サイズが100ギガバイトのXMLドキュメントの解析をサポートする必要があるこのクレイジーなユースケースに遭遇することがあります。 XMLの超高速処理(XMLパーサーチップを実装している可能性があります)。これは、標準をダンプして別の方法を探す必要がある場合です。物事を行うことの。適切な仕事に適切なツールを使用することについてです!そして、これは私があなたに見てみることを提案するところです vtd-xml

SAXとDOMの初期の頃、人々はどちらかによって提供されるよりも単純なAPIを望んでいました。 [〜#〜] jdom [〜#〜]dom4jXmlBeansJiBXCastor 人気になったのは私が知っているものです。

62

@ Pangea

JAXBとDOMおよびSAX

JAXBはDOMやSAXと直接比較することはできません。 Java DOMおよびSAX解析APIはXMLドキュメントを解析するための低レベルのAPIであり、JAXB(XMLバインディング用のJava API)はXML要素と属性をa =に変換するための高レベルのAPIです。 Javaオブジェクト階層(およびその逆)。JAXBの実装では、ほとんどの場合、バックグラウンドでDOMまたはSAXパーサーを使用して、XML入力データの実際の解析を行います。

2
小色狼