Konvertieren von XML in Java-Objekt mit Jaxb (Unmarshal)

Ich habe das folgende XML und ich muss es in ein Java-Objekt umwandeln.

  BookTitle BookName 64018  Book title1 Book Name1 5   Book title2 Book Name3 5   Book title3 Book Name3 4    

Ich bin nicht sicher, was mein Pojo sein wird, wenn ich JAXB verwende, um es umzuwandeln.

Ich habe die folgenden POJOs nach meinem Verständnis erstellt:

 public class Tests { TestData testData; public TestData getTestData() { return testData; } public void setTestData(TestData testData) { this.testData = testData; } } public class TestData { String title; String book; String count; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBook() { return book; } public void setBook(String book) { this.book = book; } public String getCount() { return count; } public void setCount(String count) { this.count = count; } } 

Bitte hilf mir. Danke im Voraus.

Tests

In der class Tests fügen wir eine @XmlRootElement Annotation hinzu. Dadurch wird Ihre JAXB-Implementierung wissen, dass wenn ein Dokument mit diesem Element beginnt, diese class instanziiert werden soll. JAXB ist eine Ausnahmekonfiguration, das heißt, Sie müssen nur Anmerkungen hinzufügen, bei denen sich das Mapping vom Standard unterscheidet. Da sich die testData Eigenschaft von der Standardzuordnung unterscheidet, verwenden wir die Annotation @XmlElement . Sie können das folgende Tutorial hilfreich finden: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted

 package forum11221136; import javax.xml.bind.annotation.*; @XmlRootElement public class Tests { TestData testData; @XmlElement(name="test-data") public TestData getTestData() { return testData; } public void setTestData(TestData testData) { this.testData = testData; } } 

Testdaten

In dieser class habe ich die @XmlType Annotation verwendet, um die Reihenfolge anzugeben, in der die Elemente angeordnet werden sollen. Ich fügte eine testData Eigenschaft hinzu, die testData fehlte. Ich habe auch eine @XmlElement Annotation aus dem gleichen Grund wie in der Tests class verwendet.

 package forum11221136; import java.util.List; import javax.xml.bind.annotation.*; @XmlType(propOrder={"title", "book", "count", "testData"}) public class TestData { String title; String book; String count; List testData; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBook() { return book; } public void setBook(String book) { this.book = book; } public String getCount() { return count; } public void setCount(String count) { this.count = count; } @XmlElement(name="test-data") public List getTestData() { return testData; } public void setTestData(List testData) { this.testData = testData; } } 

Demo

Im Folgenden finden Sie ein Beispiel für die Verwendung der JAXB-APIs zum Lesen (Entpacken) des XML-Codes und zum Auffüllen Ihres Domänenmodells. Anschließend wird das Ergebnis in XML geschrieben (marshaliert).

 package forum11221136; import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Tests.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum11221136/input.xml"); Tests tests = (Tests) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(tests, System.out); } }