Как преобразовать XML в объект значения Java?
-
13-09-2019 - |
Вопрос
Какие библиотеки с открытым исходным кодом доступны для преобразования 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 или, возможно, Hibernate, который позволит мне привязать мой объект значения к предопределенному XML.
Решение
Мне нравится XStream много, особенно по сравнению с JAXB - в отличие от JAXB, XStream не требует наличия XSD.Замечательно, если у вас есть несколько классов, которые вы хотите сериализовать и десериализовать в XML, без необходимости создавать XSD, запускать jaxc для создания классов из этой схемы и т. д.XStream, с другой стороны, довольно легкий.
(Конечно, во многих случаях JAXB уместен, например, когда у вас уже есть XSD, подходящий для данного случая...)
Другие советы
ЯКСБ позволяет конвертировать файл XML-схемы (XSD) в коллекцию классов Java.Это может быть более «структурировано», чем XMLEncoder
/Serializable
подход, который обеспечивает ответ Энди (кстати, отличный).
В Java есть XMLEncoder который вы можете использовать для сериализации объекта в XML.Единственное требование состоит в том, чтобы ваш объект реализовал сериализуемый тип.
Вот пример:
ДжиБХ это еще один вариант.
Дополнительные мнения о привязке данных Java к XML см. Сериализация XML в Java?