在此示例中,您将学习如何使用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>