Java如何在JAXB中围绕XML表示生成包装元素?
在此示例中,您将学习如何使用JAXB@XmlElementWrapper批注。此批注可用于围绕XML元素表示形式生成包装元素。如果未定义名称,则@XmlElementWrapper注释将属性名称用作包装器元素名称。让我们看看下面的代码片段。
package org.nhooo.example.jaxb;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
@XmlRootElement
public class Record {
private Integer id;
private String title;
private List<Track> tracks = new ArrayList<>();
@XmlRootElement
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@XmlElementWrapper(name = "trackList")
@XmlElement(name = "track")
public List<Track> getTracks() {
return tracks;
}
public void setTracks(List<Track> tracks) {
this.tracks = tracks;
}
}下面是将Record对象编组为XML文档的代码片段。在编组之前,我们创建一个对象,Record并在其中添加一些对象Track。
package org.nhooo.example.jaxb;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class JAXBElementWrapper {
public static void main(String[] args) {
Track track1 = new Track();
track1.setId(1);
track1.setTitle("Love Me Do");
Track track2 = new Track();
track2.setId(2);
track2.setTitle("From Me To You");
Track track3 = new Track();
track3.setId(3);
track3.setTitle("She Loves You");
Record record = new Record();
record.setId(1);
record.setTitle("The Beatles 1");
record.getTracks().add(track1);
record.getTracks().add(track2);
record.getTracks().add(track3);
try {
JAXBContext context = JAXBContext.newInstance(Record.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(record, System.out);
Writer writer = null;
try {
writer = new FileWriter("Record.xml");
marshaller.marshal(record, writer);
} finally {
if (writer != null) {
writer.close();
}
}
} catch (JAXBException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}上面的程序将生成以下XML文档。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<record id="1">
<title>The Beatles 1</title>
<trackList>
<track id="1">
<title>Love Me Do</title>
</track>
<track id="2">
<title>From Me To You</title>
</track>
<track id="3">
<title>She Loves You</title>
</track>
</trackList>
</record>