1

我想将所有xml数据填充到 java bean 类中,

<employee>
    <empId>a01</empId>
    <dptName>dev</dptName>
    <person>
        <name>xyz</name>
        <age>30</age>
        <phone>123456</phone>
    </person>
</employee>

下面是我要在其中存储xml数据的 java bean 类。

class employee{
 private String empId;
 private String dptName;
 private Person person;
    //getter setter below
    }

class Person{
    String name;
    private String age;
    private String phone;
    //getter setter below
}

我认为这可以使用JAXB但如何完成?

注意:进一步我必须将数据保存到数据库中。

4

2 回答 2

5

如果没有任何注释,您可以使用自 Java SE 6 起包含在 JDK/JRE 中的JAXB (JSR-222)执行以下操作:

没有注释

您的模型似乎与映射到您发布的 XML 所需的所有默认命名规则相匹配。这意味着您可以使用您的模型,而无需以注释的形式添加任何元数据。需要注意的一点是,如果您不指定元数据以将根元素与类关联,那么您需要在解组时指定一个Class参数,并将根对象包装在JAXBElement编组时的实例中。

演示

在下面的演示代码中,我们将 XML 转换为对象,然后将对象转换回 XML。

JAXBContext jc = JAXBContext.newInstance(Employee.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<Employee> je = unmarshaller.unmarshal(xml, Employee.class);
Employee employee = je.getValue();

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(je, System.out);

了解更多信息


JAXBElement消除需要@XmlRootElement

@XmlRootElement当一个类使用(或)与根元素相关联时,@XmlElementDecl您不需要在解组时指定Class参数或在编组时将结果包装在 a 中JAXBElement

员工

@XmlRootElement
class Employee {

演示

JAXBContext jc = JAXBContext.newInstance(Employee.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
Employee employee = (Employee) unmarshaller.unmarshal(xml);

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(employee, System.out);

了解更多信息

于 2013-11-14T10:30:53.180 回答
-2

您可以使用xstream api轻松完成此操作

XStream is a simple library to serialize objects to XML and back again.

在这里您将找到文档XStream Core 1.4.5-SNAPSHOT 文档

于 2013-11-14T04:42:47.233 回答