2011-07-04 4 views
3

多くのXMLデータで動作するアプリケーションがあります。ですから、JavaでXMLを処理するための最良のAPIがどれかをお聞きしたいと思います。今日はW3を使用していますが、パフォーマンスのためにいくつかのAPIに移行したいと考えています。 私は0からのXML、多くの変換、データベースへのインポート(mysqlmssqlなど)、データベースからhtml、それらのXMLのmodifiなどにエクスポートします。最高のパフォーマンスを得るためのXML API

JDOMが最適ですか? JDOMよりも他の何かをよく知っていますか? 約のjavootについて(読んで)読んでいます。誰か使ってる?

私にお勧めのAPIは?

+2

各APIには弱点と長所があります。この強みは、通常、別のAPIの弱点を修正することによって引き起こされます。あなたが必要とする強みはどれですか? –

答えて

2

膨大な量のデータがある場合は、大量のメモリを使用し、IOと処理が重複しないため、すべてを一度にメモリにロードする必要がありません。残念ながら、DOMとDOMのようなライブラリ(DOM4Jのような)の大半はそうしていると思いますので、膨大な量のXMLを効率的に処理するのには適していません。

代わりに、SAXやStAXなどのストリーミングAPIを使用してください。 StAXは、私の経験上、通常は使いやすくなっています。

SAXのパフォーマンスでDOMの利便性を提供する他のAPIがあります。 Javolutionは1つかもしれません。 VTD-XMLが別です。しかし、正直言って、私はStAXを使うのがとても簡単です。基本的には派手なストリームなので、ストリームからテキストファイルを読み込んでいるのと同じように考えることができます。

JAXBをStAXと組み合わせることを試してみてください。その考え方は、StAXを使用してファイルをストリーミングし、次にJAXBを使用してその中のチャンクを整列解除するというものです。たとえば、Atomフィードを処理していた場合は、それを開いてヘッダーを読み取ってから、ループしてentryの要素を一度に1つずつオブジェクトにアンマーシャリングすることができます。これは、あなたのフォーマットがAtomのような独立した要素のシーケンスで構成されている場合にのみ実際に動作します。 XHTMLのようなより豊かなものでは大して役に立たないでしょう。 JAXB reference implementationa guy's blog postに例を見ることができます。

0

私が知っているほとんどの開発者と私自身はdom4Jを使用しています。両方のフレームワークを使用して小さなperformancetestを書く時間があれば、その違いがわかります。私はdom4jを好まれます。

1

答えは、アプリケーションにとってどのようなパフォーマンス面が重要かによって異なります。 1つの要因は、大規模なXML文書を処理するかどうかです。

構文解析では、DOMベースのアプローチは大きなドキュメントにうまく適用されません。大きな文書を解析する必要がある場合は、SAXやStAXを使用するようなDOM以外のパーサーは、より高速でリソースの消費が少なくなります。ただし、XSLまたはDOM APIのいずれかを使用して解析した後にXMLを変換する必要がある場合は、いずれの場合でもメモリ内のドキュメント全体が必要になります。

StAXはコードからXMLを作成するために、このための素晴らしいAPIを提供します。このアプローチはストリームベースであるため、非常に大きなドキュメントの作成に適しています。

関連する問題