You can do the following:
Root
This example will work the same way if the field was changed to List<Animal> or ArrayList<Animal> .
package forum13178824; import javax.xml.bind.annotation.*; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Root { @XmlElement(name="animal") private Animal[] animals; }
Animal
package forum13178824; import javax.xml.bind.annotation.*; @XmlAccessorType(XmlAccessType.FIELD) public class Animal { private String name; }
Demo
package forum13178824; import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum13178824/input.xml"); Root root = (Root) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); } }
Input.xml / output
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <root> <animal> <name>barack</name> </animal> <animal> <name>mitt</name> </animal> </root>
Additional Information
Blaise donough
source share