Я согласен с использованием JAXB.
Начиная с XML-схемы (Создание классов из XML-схемы)
Вы можете использовать JAXB для генерации исходного кода Java из XML-схемы. Ниже приведены инструкции для этого с EclipseLink JAXB (MOXy):
Java SE 6 поставляется с компилятором Metro JAXB XJC, его можно найти в каталоге bin вашей установки JDK:
C:\Program Files\Java\jdk1.6.0_20\bin>xjc -d outputDir mySchema.xsd
Плагин Dali в Eclipse также имеет эту поддержку, см. Раздел о генерации класса JAXB:
Начиная с объектов
С вашей объектной моделью вы можете найти расширение отображения на основе XPath в MOXy JAXB полезным:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlPath("name/firstname/text()")
private String firstName;
@XmlPath("name/lastname/text()")
private String lastName;
// ...
}
Может использоваться со следующим демонстрационным кодом для работы с вашим XML:
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Person person = (Person) unmarshaller.unmarshal(new File("input.xml"));
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(person, System.out);
}
}
Для получения дополнительной информации о сопоставлениях на основе XPath см .:
Для элемента "born" вам может пригодиться XmlAdapter JAXB: