2009-04-23 69 views
2

什么样的开源库可用于将XML转换为java值对象?如何将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() 
    { 
    } 
    } 
} 

我在想,如果有使用注释,类似于.NET或可能休眠的方法,这将允许我值对象绑定到预定义的XML。

回答

13

我喜欢XStream很多,特别是与JAXB相比 - 不像JAXB,XStream不需要你有XSD。如果你有一些你想要序列化和反序列化为XML的类,这很好,不需要过多的手动创建XSD,运行jaxc来从那个模式生成类,等等。另一方面,XStream很漂亮轻巧。

(当然,也有很多次,其中JAXB是合适的,比如当你有一个适合的场合......预先存在的XSD)

+0

非常容易使用。我以前听说过这个,但是我没有投入使用。谢谢! – Kevin 2009-04-23 00:56:23

2

JAXB允许你转换一个XML Schema(XSD)文件转换成Java类的集合。这可能比安迪(答案很好)的答案提供的XMLEncoder/Serializable方法更“结构化”。