2

XML を Java 値オブジェクトに変換するために利用できるオープンソース ライブラリには、どのようなものがありますか?

.Net では、xml のシリアル化と属性を使用してこれを簡単に行う方法があります。Javaにもいくつかの類似点があると思います。DOM または SAX パーサーを使用してこれを行う方法は知っていますが、もっと簡単な方法があるかどうか疑問に思っていました。

次のような定義済みの XML 形式があります。

<FOOBAR_DATA>
  <ID>12345</ID>
  <MESSAGE>Hello World!</MESSAGE>
  <DATE>22/04/2009</DATE>
  <NAME>Fred</NAME>
</FOOBAR_DATA>

.Net では、このようなことを行って、オブジェクトをデータにバインドできます。

using System;
using System.Xml.Serialization;

    namespace FooBarData.Serialization
    {
      [XmlRoot("FOOBAR_DATA")]
      public class FooBarData
  {
    private int _ID = 0;
    [XmlElement("ID")]
    public int ID
    {
      get { return this._ID; }
      set { this._ID = value; }
    }

    private string _Message = "";
    [XmlElement("MESSAGE")]
    public string Message
    {
      get { return this._Message; }
      set { this._Message = value; }
    }

    private string _Name = "";
    [XmlElement("NAME")]
    public string Name
    {
      get { return this._Name; }
      set { this._Name = value; }
    }

    private Date _Date;
    [XmlElement("DATE")]
    public Date Date
    {
      get { return this._Date; }
      set { this._Date= value; }
    }

    public FooBarData()
    {
    }
  }
}

値オブジェクトを定義済みの XML にバインドできるようにする、.Net やおそらく Hibernate に似た、注釈を使用するメソッドがあるかどうか疑問に思っていました。

4

4 に答える 4

13

特に JAXB と比較して、私はXStreamが大好きです。JAXB とは異なり、XStream では XSD が必要ありません。XSD を作成したり、jaxc を実行してそのスキーマからクラスを生成したりする必要がなく、XML にシリアライズおよびデシリアライズしたいクラスがいくつかある場合に最適です。一方、XStream はきれいです。軽量。

(もちろん、状況に合った既存の XSD がある場合など、JAXB が適切な場合はたくさんあります...)

于 2009-04-23T00:16:22.663 に答える
2

JAXBを使用すると、XML スキーマ (XSD) ファイルを Java クラスのコレクションに変換できます。これは、Andyの(ちなみに、優れた)回答が提供するXMLEncoder/アプローチよりも「構造化」されている可能性があります。Serializable

于 2009-04-23T00:08:20.610 に答える
1

JiBXは別のオプションです。

Java から XML へのデータ バインディングに関するその他の意見については、Java でのXML シリアライゼーションを参照してください。

于 2009-05-29T17:03:43.160 に答える
1

Java には、オブジェクトを XML にシリアライズするために使用できるXMLEncoderがあります。唯一の要件は、オブジェクトが「シリアライズ可能」を実装していることです。

次に例を示します。

http://www.developer.com/java/web/article.php/1377961

于 2009-04-23T00:07:44.557 に答える