web-dev-qa-db-ja.com

Java用の最高のXMLパーサー

私はもっ​​と小さい(せいぜい数MB、UTF-8でエンコードされた)XMLファイルを読み、さまざまな要素や属性を見て回って、おそらく少し修正してXMLをディスクに書き戻す必要があります。 。

私のニーズに最適なXMLパーサーは何でしょうか。から選ぶべきたくさんあります。私が知っているいくつかは次のとおりです。

そしてもちろんJDKの中のもの(私はJava 6を使っています)。私はXercesに精通していますが、不格好です。

おすすめは?

380
Evan

速度とメモリに問題がなければ、dom4jが本当に良い選択肢です。スピードが必要な場合は、WoodstoxのようなStAXパーサーを使用するのが正しい方法ですが、作業を進めるにはさらにコードを記述する必要があります。 XMLをストリームで処理するために使用されます。

80
zehrer

私はあなたが特定のパーサーの実装を考慮すべきではないと思います。 XML処理用のJava API を使用すると、標準に準拠したパーサー実装を使用できます。コードはもっと移植性があるはずです、そして特定のパーサが古すぎると気づいたら、コードの行を変えずに別のものに置き換えることができます(正しく行なえば)。

基本的に、標準的な方法でXMLを処理する方法は3つあります。

  • SAX これは最も単純なAPIです。 XMLがシリアルに処理されるときに要素/属性内のデータを受け取るHandlerクラスを定義することによってXMLを読みます。あなたがいくつかの属性/要素を読み、そして/または、いくつかの値を書き戻すことを計画しているならば、それはより速くそしてより単純です(あなたのケース)。
  • DOM このメソッドはランダムに変更/アクセスできるオブジェクトツリーを作成するので、複雑なXMLの操作と処理に適しています。
  • StAX これはSAXとDOMの間のパスの真ん中にあります。あなたはそれが処理されるときあなたが興味を持っているパーサーからデータを引き出すためにコードを書くだけです。

JDOMやApacheなどの独自のAPI(つまり、 Apache Xerces XMLSerializer )については忘れてください。互換性があるため、将来JDOMの新しいバージョンにアップグレードするとき、または使用するすべてのパーサーにアップグレードするときに、コードを変更することになります。ファクトリとインタフェースを使用してJava標準APIに固執すると、コードははるかにモジュール化され、保守が容易になります。

提案されたパーサーのすべて(私はすべてチェックしていませんが、ほぼ確実です)がJAXP実装に準拠していると言う必要はありませんので、技術的にはすべてを使用できます。

250

これは、DOM、SAX、StAX、およびTrAXについての素晴らしい比較です(出典: http://download.Oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2 .html

機能StAX SAX DOM TrAX

APIタイププル、ストリーミングプッシュ、ストリーミングメモリツリー内XSLTルール

使いやすさ高中高中

XPath機能いいえいいえはいはい

CPUとメモリ良い良いさまざまな

転送のみはいはいいいえいいえ

XMLの読み取りはいはいはいはい

XMLを書くはいいいえはいはい

CRUDいいえいいえはいいいえ

127
Kadir

単純なXML http://simple.sourceforge.net/ は、オブジェクトを(非)シリアライズするのに非常に簡単です。

8
asdf

SAXおよびDOMに加えて、XMLプルパーサーであるXMLStreamReaderを使用して利用可能なSTaX解析があります。

4
kitsuneymg

私はdom4jがXMLを扱うためのツールであることがわかりました。特にXercesと比較して。

3
Brian Matthews

私はこれをお勧めしませんが、あなたはあなたのアプリケーションで多くの「考え」を持っています、しかしXSLTを使うことはJava操作より良い(そして潜在的にXSLTからバイトコードへのコンパイルで速い)かもしれません。

2
Thomas Barker

パフォーマンスをあまり気にしないのであれば、基本的にXMLからJava Beansに直接マップできるので、私はApache Digesterの大ファンです。

それ以外の場合は、最初に解析してからオブジェクトを構築する必要があります。

1
Uri