web-dev-qa-db-ja.com

どのようなJava XMLライブラリをお勧めしますか(dom4jを置き換えるために)?

私はdom4jのようなものを探していますが、dom4jのいぼはありません。たとえば、ドキュメントの質の低さや欠落、開発ステータスの失速などです。

背景:私は andadvocating dom4jを使用していますが、ライブラリが最適とはほど遠い(例:XSLTに関連する Stylesheet クラスのメソッドがどのように文書化されているかをご覧ください。String modeパラメーターとしてrun()に何を渡しますか?)

要件:ライブラリは、 usingpure JDKjavax.xmlの場合よりも基本的なXML処理を簡単にする必要があります。 および org.w3c.dom パッケージ)。このようなもの:

  • XMLファイルを(ファイルまたは文字列から)オブジェクトに読み込み、DOMを簡単にトラバースして操作し、XPathクエリを実行し、XSLTを実行します。
  • JavaコードでXMLドキュメントを構築し、要素と属性とデータを追加し、最後にドキュメントをファイルまたは文字列に書き込みます。

私は本当に dom4j promises が本当に好きです、実際: "使いやすい、XML、XPath、XSLTを操作するためのオープンソースライブラリ[... ] DOM、SAX、およびJAXPを完全にサポートしています。 "そして、今後のdom4j 2.0はすべてを修正すると主張しています。Java 5を完全に活用し、不足しているドキュメントを追加します。しかし、残念なことに、 近くを見ると

警告:dom4j 2.0はプレアルファ段階です。コンパイルできない可能性があります。ランダムにコンパイルできる場合は、実行できない可能性があります。たまに実行されると、突然爆発する可能性があります。 dom4jを使用する場合は、バージョン1.6.1が必要です。本当に。

...そして、ウェブサイトはlong時間の間それを言った。では、dom4jに代わる優れた手段はありますか?名前とリンクを単にダンプするのではなく、お好みのライブラリの正当な理由を提供してください。 :-)

76
Jonik

確かに、 [〜#〜] xom [〜#〜] :-)

XOMは、学習しやすく使いやすいように設計されています。それは非常に簡単に動作し、非常に浅い学習曲線を持っています。すでにXMLに精通していると仮定すると、XOMを非常に迅速に立ち上げて実行できるはずです。

私は今、数年間XOMを使用していますが、今でもとても気に入っています。使いやすく、多くのドキュメントやWeb上の記事があり、APIはリリース間で変わりません。 1.2は最近リリースされました。

XOMは、正確性を損なうことのない唯一のXML APIです。 XOMは、名前空間の整形式XMLドキュメントのみを受け入れ、名前空間の整形式XMLドキュメントのみを作成できます。 (実際、それはそれよりも少し厳密です。実際には、すべてのドキュメントがラウンドトリップ可能であり、明確に定義されたXML情報セットを持っていることが保証されます。) XOMを使用すると、アプリケーションの固有の価値に焦点を当て、XOMを信頼してXMLを正しく使用できます。

Webページを確認してください http://www.xom.nu/ FAQ、クックブック、設計根拠など。すべてが非常に多くの愛を込めて設計されている場合:-)

また、著者は XML APIの問題点(およびそれらの修正方法) についても書いています。 (基本的に、XOMがそもそも存在する理由)

また、XOMに関する作者との5部構成のArtimaのインタビューもあり、そこでは XML APIの何が問題なのかThe Good、the Bad、およびDOMJDOMの設計レビューJDOMから学んだ教訓 そして最後に 設計原則とXOM

53

JDKに組み込まれているもの ...いくつかの追加。

はい、使用するのは苦痛です:委員会によって明確に設計されたW3C仕様に基づいてモデル化されています。ただし、どこでも使用できます。解決すれば、サードパーティのライブラリからの「Dom4Jが好き」、「JDOMが好き」、「StringBufferが好き」という引数にぶつかることはありません。特に、そのような引数は異なるライブラリを使用して異なるコードの断片に変わる可能性があるため...

しかし、私が言ったように、私は少し拡張します:Practical XML ライブラリは、DOMでの作業を容易にするユーティリティクラスのコレクションです。 XPathラッパー以外に、ここには複雑なものは何もありません。すべてのジョブについて書き直したルーチンの束だけです。

17
kdgregory

Dom4jを置き換えるために XMLTool を使用してきましたが、かなりうまく機能しています。

XMLツールはFluent Interfaceパターンを使用して、XML操作を容易にします。

XMLTag tag = XMLDoc.newDocument(false)
   .addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/")
   .addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0")
   .addRoot("html")
   .addTag("wicket:border")
   .gotoRoot().addTag("head")
   .addNamespace("other", "http://other-ns.com")
   .gotoRoot().addTag("other:foo");
System.out.println(tag.toString());

Java 5用に作成されており、選択した要素上で反復可能なオブジェクトを簡単に作成できます。

for (XMLTag xmlTag : tag.getChilds()) {
   System.out.println(xmlTag.getCurrentTagName());
}
10

私はいつも jdom が好きでした。 DOM解析よりも直感的になるように書かれました(とにかく、SAX解析は常に扱いにくいようです)。

ミッションステートメントから:

Java APIを使用してXMLを操作し、XMLを複雑、トリッキー、直感的でない、または首の痛みにする理由はありません。JDOMTMはJava中心であり、Javaに最適化されています。 Java、Javaコレクション、現在のJava開発者にとって完全に自然なAPIであり、XMLを使用するための低コストのエントリポイントを提供します。

それは私の経験でした-ノードツリーのかなり直感的なナビゲーション。

6
Steve B.

XStream を使用します。これはオブジェクトをXMLにシリアル化し、再び戻すためのシンプルなライブラリです。

annotation-driven (JAXBと同様)でもかまいませんが、非常にシンプルで使いやすいapiがあり、JSONを生成することもできます。

5
IAdapter

@kdgregoryによる組み込みの回答に、なぜJAXBを使用しないのかを追加して追加します。

いくつかの注釈があれば、ほとんどのXMLドキュメントを非常に簡単にモデル化できます。私はおそらくあなたがものを解析してオブジェクトを入れるつもりですか?

JAXB 2.0はJDK 1.6に組み込まれており、他の多くの組み込みjavaxライブラリとは異なり、このライブラリはかなり優れています(Kohusukeが取り組んでいるので、その良さを知っています)。

3
Adam Gent

最近のプロジェクトでは、XML解析を行わなければならず、同僚が推奨するSimple Frameworkを使用することになりました。

最終的にはとても満足しました。 XML要素と属性をJavaクラスとフィールドにマッピングするアノテーションベースのアプローチを使用します。

<example>
  <a>
    <b>
      <x>foo</x>
    </b>
    <b>
      <y>bar</y>
    </b>
  </a>
</example>

対応するJavaコード:

@Root
public class Example {

   @Path("a/b[1]")
   @Element
   private String x;

   @Path("a/b[2]")
   @Element
   private String y;
}

それはすべてdom4jやXOMとはまったく異なります。愚かな、定型的なXML処理コードを記述することは避けますが、最初はアノテーションを正しく取得しようとしてしばらく壁にぶつかるでしょう。

(4年前にこの質問をしたのは私でした。 [〜#〜] xom [〜#〜] はまともで人気のあるdom4jの代替品のようですが、私は完全にそれを受け入れるようにはなりませんでした。誰もここでSimple Frameworkに言及していないことに興味があります。おそらくそれを再び使用するので、私はそれを修正することにしました。)

2
Jonik

このプロジェクトでは、 http://www.castor.org/ を使用していますが、これは小さなXMLファイル用です。学ぶことは本当に簡単で、マッピングXMLファイルだけが必要です(XMLタグがクラス属性に完全に一致する場合は必要ありません)。追加の処理を実行するリスナー(コールバックなど)をサポートします。短所:Java JAXBのようなEE標準ではありません。

1
Lluis Martinez

jAXBを試すことができます。アノテーションは非常に便利で簡単です。 XMLバインディングのJavaアーキテクチャ

0
Taran Singh

XMLドキュメントを作成するには、 xmlenc をお勧めします。 cassandra で使用されます。

0
Jingguo Yao

私は時々 Jericho を使用しています。これは主にHTMLパーサーですが、XMLに似た構造を解析できます。

もちろん、指定された名前のタグの検索、構造の反復、タグとその属性の置換など、最も単純なXML操作のみに使用されますが、これはほとんどのユースケースではありませんか?

0
Danubian Sailor