Java tutorial
import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlID; import javax.xml.bind.annotation.XmlIDREF; import javax.xml.bind.annotation.XmlRootElement; public class Main { public static class Person { @XmlID String id; @XmlElement String name; @XmlElement int age; public Person() { } public Person(String name) { this.id = this.name = name; age = new Random().nextInt(); } } @XmlRootElement public static class HumansList { @XmlElementWrapper(name = "humanObjects") @XmlElement(name = "human") List<Person> humanObjects = new ArrayList<>(); @XmlIDREF @XmlElementWrapper(name = "humanIds") @XmlElement(name = "id") List<Person> humanIds = new ArrayList<>(); void addHuman(Person human) { humanObjects.add(human); humanIds.add(human); } } public static void main(String[] args) throws JAXBException { HumansList list = new HumansList(); Person parent1 = new Person("parent1"); list.addHuman(parent1); Person child11 = new Person("child11"); list.addHuman(child11); Person child12 = new Person("child12"); list.addHuman(child12); Person parent2 = new Person("parent2"); list.addHuman(parent2); Person child21 = new Person("child21"); list.addHuman(child21); Person child22 = new Person("child22"); list.addHuman(child22); JAXBContext context = JAXBContext.newInstance(HumansList.class); Marshaller m = context.createMarshaller(); StringWriter xml = new StringWriter(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); m.marshal(list, xml); System.out.println(xml); } }