如何将XML转换为Java对象--JAXB拆分法

x33g5p2x  于2022-10-06 转载在 Java  
字(4.6k)|赞(0)|评价(0)|浏览(1176)

在这篇文章中,我们将学习如何使用Java Architecture for XML Binding(JAXB)将XML转换为Java对象。
Java Architecture for XML Binding (JAXB)是一个Java标准,它定义了Java对象如何从XML转换到XML。它使用一套标准的映射。

在JAXB术语中,将XML转换为Java对象被称为JAXB Unmarshalling。JAXB API提供了UnMarshaller接口,我们可以将对象解读为一个XML文档。
查看如何将Java对象转换为XML - JAXB Marshalling

让我们看看将XML文档转换为Java对象的步骤。

  • 创建POJO或绑定模式并生成类
  • 创建JAXBContext对象
  • 创建Unmarshaller对象
  • 调用unmarshal方法
  • 使用POJO的getter方法来访问数据

Unmarshaller例子。将XML文档转换为Java对象

XML文档

这里是我们要转换为Java对象的XML文件。

  1. <?xmlversion="1.0"encoding="UTF-8"standalone="yes"?>
  2. <ns2:bookstore
  3. xmlns:ns2="net.javaguides.javaxmlparser.jaxb">
  4. <bookList>
  5. <book>
  6. <author>Joshua Bloch</author>
  7. <title>Effective Java</title>
  8. <publisher>Amazon</publisher>
  9. <isbn>978-0134685991</isbn>
  10. </book>
  11. <book>
  12. <author>Kathy Sierra</author>
  13. <title>Head First Java, 2nd Edition</title>
  14. <publisher>amazon</publisher>
  15. <isbn>978-0596009205</isbn>
  16. </book>
  17. </bookList>
  18. <location>Newyorkt</location>
  19. <name>Amazon Bookstore</name>
  20. </ns2:bookstore>

创建POJO类并添加JAXB注解

一些基本的和有用的JAXB注解是。

  1. @XmlRootElement。这是在JAXB中使用的Object必须有的注解。它定义了XML内容的根元素。
  2. @XmlType。它将类映射到XML模式类型。我们可以用它来排列XML中的元素。
  3. @XmlTransient。这将确保Object属性不被写入XML中。
  4. @XmlAttribute: 这将创建Object属性作为一个属性。
  5. @XmlElement(name = “ABC”): 这将创建名称为 "ABC "的元素。

Book POJO类

  1. package net.javaguides.javaxmlparser.jaxb;
  2. import javax.xml.bind.annotation.XmlElement;
  3. import javax.xml.bind.annotation.XmlRootElement;
  4. import javax.xml.bind.annotation.XmlType;
  5. @XmlRootElement(name = "book")
  6. @XmlType(propOrder = {
  7. "author",
  8. "name",
  9. "publisher",
  10. "isbn"
  11. })
  12. public class Book {
  13. private String name;
  14. private String author;
  15. private String publisher;
  16. private String isbn;
  17. @XmlElement(name = "title")
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public String getAuthor() {
  25. return author;
  26. }
  27. public void setAuthor(String author) {
  28. this.author = author;
  29. }
  30. public String getPublisher() {
  31. return publisher;
  32. }
  33. public void setPublisher(String publisher) {
  34. this.publisher = publisher;
  35. }
  36. public String getIsbn() {
  37. return isbn;
  38. }
  39. public void setIsbn(String isbn) {
  40. this.isbn = isbn;
  41. }
  42. }

Bootstore POJO类

  1. package net.javaguides.javaxmlparser.jaxb;
  2. import java.util.List;
  3. import javax.xml.bind.annotation.XmlElement;
  4. import javax.xml.bind.annotation.XmlElementWrapper;
  5. import javax.xml.bind.annotation.XmlRootElement;
  6. @XmlRootElement(namespace = "net.javaguides.javaxmlparser.jaxb")
  7. public class Bookstore {
  8. @XmlElementWrapper(name = "bookList")
  9. @XmlElement(name = "book")
  10. private List < Book > bookList;
  11. private String name;
  12. private String location;
  13. public void setBookList(List < Book > bookList) {
  14. this.bookList = bookList;
  15. }
  16. public List < Book > getBooksList() {
  17. return bookList;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. public String getLocation() {
  26. return location;
  27. }
  28. public void setLocation(String location) {
  29. this.location = location;
  30. }
  31. }

Unmarshaller类 - 在Java中转换XML为对象

  1. package net.javaguides.javaxmlparser.jaxb;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import javax.xml.bind.JAXBContext;
  7. import javax.xml.bind.JAXBException;
  8. import javax.xml.bind.Unmarshaller;
  9. /**
  10. * Unmarshaller Class - Convert XML to Object in Java
  11. * @author Ramesh Fadatare
  12. *
  13. */
  14. public class BookMain {
  15. private static final String BOOKSTORE_XML = "bookstore-jaxb.xml";
  16. public static void main(String[] args) throws JAXBException, IOException {
  17. List < Book > bookList = new ArrayList < Book > ();
  18. // create books
  19. Book book1 = new Book();
  20. book1.setIsbn("978-0134685991");
  21. book1.setName("Effective Java");
  22. book1.setAuthor("Joshua Bloch");
  23. book1.setPublisher("Amazon");
  24. bookList.add(book1);
  25. Book book2 = new Book();
  26. book2.setIsbn("978-0596009205");
  27. book2.setName("Head First Java, 2nd Edition");
  28. book2.setAuthor("Kathy Sierra");
  29. book2.setPublisher("amazon");
  30. bookList.add(book2);
  31. // create bookstore, assigning book
  32. Bookstore bookstore = new Bookstore();
  33. bookstore.setName("Amazon Bookstore");
  34. bookstore.setLocation("Newyorkt");
  35. bookstore.setBookList(bookList);
  36. convertXMLToObject();
  37. }
  38. private static Bookstore convertXMLToObject() {
  39. try {
  40. JAXBContext context = JAXBContext.newInstance(Bookstore.class);
  41. Unmarshaller un = context.createUnmarshaller();
  42. Bookstore bookstore = (Bookstore) un.unmarshal(new File(BOOKSTORE_XML));
  43. List < Book > list = bookstore.getBooksList();
  44. for (Book book: list) {
  45. System.out.println("Book: " + book.getName() + " from " + book.getAuthor());
  46. }
  47. } catch (JAXBException e) {
  48. e.printStackTrace();
  49. }
  50. return null;
  51. }
  52. }

输出

  1. Book: Effective Java from Joshua Bloch
  2. Book: Head First Java, 2nd Edition from Kathy Sierra

相关文章

最新文章

更多