使用jaxb(unmarshal)将xml转换为java对象

前端之家收集整理的这篇文章主要介绍了使用jaxb(unmarshal)将xml转换为java对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下XML和我需要将其转换为一个java对象。
  1. <tests>
  2. <test-data>
  3. <title>BookTitle</title>
  4. <book>BookName</book>
  5. <count>64018</count>
  6. <test-data>
  7. <title>Book title1</title>
  8. <book>Book Name1</book>
  9. <count>5</count>
  10. </test-data>
  11. <test-data>
  12. <title>Book title2</title>
  13. <book>Book Name3</book>
  14. <count>5</count>
  15. </test-data>
  16. <test-data>
  17. <title>Book title3</title>
  18. <book>Book Name3</book>
  19. <count>4</count>
  20. </test-data>
  21. </test-data>
  22. </tests>

我不知道什么将是我的pojo当我使用JAXB来转换它。

我根据我的理解创建了以下POJO:

  1. public class Tests {
  2.  
  3. TestData testData;
  4.  
  5. public TestData getTestData() {
  6. return testData;
  7. }
  8.  
  9. public void setTestData(TestData testData) {
  10. this.testData = testData;
  11. }
  12. }
  13.  
  14. public class TestData {
  15. String title;
  16. String book;
  17. String count;
  18.  
  19. public String getTitle() {
  20. return title;
  21. }
  22. public void setTitle(String title) {
  23. this.title = title;
  24. }
  25. public String getBook() {
  26. return book;
  27. }
  28. public void setBook(String book) {
  29. this.book = book;
  30. }
  31. public String getCount() {
  32. return count;
  33. }
  34. public void setCount(String count) {
  35. this.count = count;
  36. }
  37. }

请帮帮我。
提前致谢。

测试

在测试类中,我们将添加一个@XmlRootElement注释。这样做会让你的JAXB实现知道当一个文档以这个元素开始时,它应该实例化这个类。 JAXB是异常配置,这意味着您只需要添加注释,其中映射与默认值不同。由于testData属性与默认映射不同,我们将使用@XmlElement注释。您可能会找到以下教程:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted

  1. package forum11221136;
  2.  
  3. import javax.xml.bind.annotation.*;
  4.  
  5. @XmlRootElement
  6. public class Tests {
  7.  
  8. TestData testData;
  9.  
  10. @XmlElement(name="test-data")
  11. public TestData getTestData() {
  12. return testData;
  13. }
  14.  
  15. public void setTestData(TestData testData) {
  16. this.testData = testData;
  17. }
  18.  
  19. }

测试数据

在这个类上,我使用@XmlType注释来指定元素应该在其中排序的顺序。我添加了一个看起来缺少的testData属性。我也使用一个@XmlElement注释的原因与测试类相同。

  1. package forum11221136;
  2.  
  3. import java.util.List;
  4. import javax.xml.bind.annotation.*;
  5.  
  6. @XmlType(propOrder={"title","book","count","testData"})
  7. public class TestData {
  8. String title;
  9. String book;
  10. String count;
  11. List<TestData> testData;
  12.  
  13. public String getTitle() {
  14. return title;
  15. }
  16. public void setTitle(String title) {
  17. this.title = title;
  18. }
  19. public String getBook() {
  20. return book;
  21. }
  22. public void setBook(String book) {
  23. this.book = book;
  24. }
  25. public String getCount() {
  26. return count;
  27. }
  28. public void setCount(String count) {
  29. this.count = count;
  30. }
  31. @XmlElement(name="test-data")
  32. public List<TestData> getTestData() {
  33. return testData;
  34. }
  35. public void setTestData(List<TestData> testData) {
  36. this.testData = testData;
  37. }
  38. }

演示

以下是如何使用JAXB API读取(解组)XML并填充您的域模型,然后将结果写回(封送)到XML的示例。

  1. package forum11221136;
  2.  
  3. import java.io.File;
  4. import javax.xml.bind.*;
  5.  
  6. public class Demo {
  7.  
  8. public static void main(String[] args) throws Exception {
  9. JAXBContext jc = JAXBContext.newInstance(Tests.class);
  10.  
  11. Unmarshaller unmarshaller = jc.createUnmarshaller();
  12. File xml = new File("src/forum11221136/input.xml");
  13. Tests tests = (Tests) unmarshaller.unmarshal(xml);
  14.  
  15. Marshaller marshaller = jc.createMarshaller();
  16. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
  17. marshaller.marshal(tests,System.out);
  18. }
  19.  
  20. }

猜你在找的XML相关文章