我有以下XML和我需要将其转换为一个java对象。
<tests> <test-data> <title>BookTitle</title> <book>BookName</book> <count>64018</count> <test-data> <title>Book title1</title> <book>Book Name1</book> <count>5</count> </test-data> <test-data> <title>Book title2</title> <book>Book Name3</book> <count>5</count> </test-data> <test-data> <title>Book title3</title> <book>Book Name3</book> <count>4</count> </test-data> </test-data> </tests>
我不知道什么将是我的pojo当我使用JAXB来转换它。
我根据我的理解创建了以下POJO:
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; } }
请帮帮我。
提前致谢。
测试
原文链接:https://www.f2er.com/xml/293577.html在测试类中,我们将添加一个@XmlRootElement注释。这样做会让你的JAXB实现知道当一个文档以这个元素开始时,它应该实例化这个类。 JAXB是异常配置,这意味着您只需要添加注释,其中映射与默认值不同。由于testData属性与默认映射不同,我们将使用@XmlElement注释。您可能会找到以下教程: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; } }
测试数据
在这个类上,我使用@XmlType注释来指定元素应该在其中排序的顺序。我添加了一个看起来缺少的testData属性。我也使用一个@XmlElement注释的原因与测试类相同。
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> 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<TestData> getTestData() { return testData; } public void setTestData(List<TestData> testData) { this.testData = testData; } }
演示
以下是如何使用JAXB API读取(解组)XML并填充您的域模型,然后将结果写回(封送)到XML的示例。
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); } }