Wie konvertitiere ich XML in ein Java-Wertobjekt?

Welche Art von Open-Source-Bibliotheken stehen zur Verfügung, um XML in ein Java-Wertobjekt zu konvertieren?

In .Net gibt es eine Möglichkeit, dies mit XML-Serialisierung und Attributen einfach zu tun. Ich würde mir vorstellen, es gibt einige Parallele in Java. Ich weiß, wie man dies mit einem DOM- oder SAX-Parser macht, aber ich habe mich gefragt, ob es einen einfacheren Weg gibt.

Ich habe ein vordefiniertes XML-Format, das etwa so aussieht.

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

In .Net kann ich so etwas tun, um mein Objekt an die Daten zu binden.

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()
    {
    }
  }
}

Ich fragte mich, ob es eine Methode mit Anmerkungen gab, ähnlich wie .Net oder vielleicht Hibernate, die es mir erlaubt, mein Wertobjekt an das vordefinierte XML zu binden.

Antwort auf "Wie konvertitiere ich XML in ein Java-Wertobjekt? " 4 von antworten

Java verfügt über ein XMLEncoder that you might be able to use to serialize an object to XML. The only requirement is that your object implements "Serializable.", mit dem Sie ein Objekt in XML serialisieren können. Die einzige Voraussetzung ist, dass Ihr Objekt "Serializable" implementiert.

Hier ist ein Beispiel:

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

Mit

JAXB allows you to convert an XML Schema (XSD) file into a collection of Java classes. This may be more "structured" than the XMLEncoder/ / Serializable approach that Andy's (excellent, by the way) answer provides. approach that Andy's (excellent, by the way) answer provides. können Sie eine XML-Schemadatei (XSD) in eine Sammlung von Java-Klassen konvertieren. Dies kann "strukturierter" sein als der XMLEncoder/ / Serializable approach that Andy's (excellent, by the way) answer provides. Ansatz, den Andys (vorzüglich übrigens) Antwort bietet.

Ich mag XStream alot, especially compared to JAXB - unlike JAXB, XStream doesn't need you to have an XSD. It's great if you have a handful of classes you want to serialize and deserialize to XML, without the heavy-handed-ness of needing to create a XSD, run jaxc to generate classes from that schema, etc. XStream on the other hand is pretty lightweight. sehr, vor allem im Vergleich zu JAXB - im Gegensatz zu JAXB braucht XStream keine XSD. Es ist großartig, wenn Sie eine Handvoll Klassen haben, die Sie serialisieren und in XML deserialisieren möchten, ohne die schwerfällige Notwendigkeit, eine XSD erstellen zu müssen, jaxc auszuführen, um Klassen aus diesem Schema zu generieren usw. XStream dagegen ist ziemlich leicht.

(Natürlich gibt es viele Male, in denen JAXB geeignet ist, z. B. wenn Sie eine bereits vorhandene XSD haben, die zum Anlass passt...)

JiBX is another option. ist eine weitere Option.

Weitere Meinungen zur Java-zu-XML-Datenbindung finden Sie unter XML serialization in Java?