Java 实现对象与XML互转

在软件开发中,经常需要将对象序列化为XML格式,或者将XML格式的数据反序列化为对象。Java提供了多种库来实现对象与XML的互转,如JAXB、XStream等。本文将介绍如何使用JAXB库实现对象与XML的互转。

旅行图

首先,让我们通过一个旅行图来了解对象与XML互转的基本流程:

journey
    title 对象与XML互转流程
    section 定义Java类
      Step1: 定义Java类,使用JAXB注解
    section 序列化对象到XML
      Step2: 使用JAXB的Marshaller类将对象序列化为XML
    section 反序列化XML到对象
      Step3: 使用JAXB的Unmarshaller类将XML反序列化为对象
    section 完成转换
      Step4: 完成对象与XML的互转

定义Java类

首先,我们需要定义一个Java类,并使用JAXB注解来标识类的属性和方法。以下是一个简单的示例:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "Person")
public class Person {
    private String name;
    private int age;

    @XmlElement(name = "Name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement(name = "Age")
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在上面的代码中,我们定义了一个名为Person的类,并使用@XmlRootElement注解来指定XML的根元素名称。同时,使用@XmlElement注解来指定属性的名称。

序列化对象到XML

接下来,我们使用JAXB的Marshaller类将对象序列化为XML。以下是一个示例:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.setName("张三");
        person.setAge(30);

        JAXBContext context = JAXBContext.newInstance(Person.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        StringWriter writer = new StringWriter();
        marshaller.marshal(person, writer);

        System.out.println(writer.toString());
    }
}

在上面的代码中,我们首先创建了一个Person对象,并设置了其属性。然后,我们使用JAXBContextMarshaller将对象序列化为XML,并输出到控制台。

反序列化XML到对象

最后,我们使用JAXB的Unmarshaller类将XML反序列化为对象。以下是一个示例:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

public class Main {
    public static void main(String[] args) throws Exception {
        String xml = "<Person><Name>张三</Name><Age>30</Age></Person>";

        JAXBContext context = JAXBContext.newInstance(Person.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();

        Person person = (Person) unmarshaller.unmarshal(new StringReader(xml));

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

在上面的代码中,我们定义了一个XML字符串,并使用JAXBContextUnmarshaller将XML反序列化为Person对象。然后,我们输出对象的属性值。

结语

通过本文的介绍,我们了解了如何使用JAXB库实现Java对象与XML的互转。通过定义Java类并使用JAXB注解,我们可以轻松地将对象序列化为XML,或者将XML反序列化为对象。这在数据交换和配置文件处理等方面非常有用。希望本文对您有所帮助。