Java如何使用JAXB将对象转换为XML?

JAXB,用于XML绑定的Java体系结构,它使用JAXB批注将POJO转换为XML文件或从XML文件转换POJO。在此示例中,您将学习如何使用JAXB将对象/ POJO转换为XML文档。将对象转换为XML的过程也称为封送处理。自1.6版以来,JAXB是JDK的一部分,因此在使用JAXB时不需要其他库。在此片段中,我们的POJO是一个名为的类Track,如下所示。

我们需要做的第一件事是Track用两个JAXB注解对POJO进行注释。在这个例子中,我们添加@XmlRootElement,@XmlElement和@XmlAttribute注解。

package org.nhooo.example.jaxb;

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

@XmlRootElement
public class Track {
    private Integer id;
    private String title;

    public Track() {
    }

    public Integer getId() {
        return id;
    }

    @XmlAttribute
    public void setId(Integer id) {
        this.id = id;
    }

    @XmlElement
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Track{" +
                "id=" + id +
                ", title='" + title + ''' +
                '}';
    }
}

在给Track类添加注解后,我们可以使用下面的代码片段将POJO转换为XML。 首先,创建一个JAXBContext实例。 从该上下文对象,我们创建Marshaller对象。 为了将其转换为XML,我们调用了marshall()方法。 该方法有很多重载,在这种情况下,我们只想将XML打印到System.out。

package org.nhooo.example.jaxb;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JAXBObjectToXml {
    public static void main(String[] args) {
        Track track = new Track();
        track.setId(1);
        track.setTitle("Hey Jude");

        try {
            JAXBContext context = JAXBContext.newInstance(Track.class);

            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(track, System.out);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

如果运行此代码,您将获得以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<track id="1">
    <title>Hey Jude</title>
</track>