原文: https://howtodoinjava.com/jaxb/write-object-to-xml/

将 Java 对象写入 XML 的 Java 示例。 Java 对象字段中存储的信息可以写入 XML 文件,也可以写入 XML 字符串

1)将 Java 对象转换为 XML 字符串

要将 Java 对象写入 XML String,请首先获取JAXBContext。 它是 JAXB API 的入口点,并提供了解组,组组和验证操作的方法。

现在从JAXBContext获取Marshaller实例。 marshal()方法将 Java 对象编组为 XML。 现在可以将此 XML 写入不同的输出,例如,字符串,文件或流。

  1. package com.howtodoinjava.demo;
  2. import java.io.File;
  3. import java.io.StringWriter;
  4. import javax.xml.bind.JAXBContext;
  5. import javax.xml.bind.JAXBException;
  6. import javax.xml.bind.Marshaller;
  7. public class JaxbExample
  8. {
  9. public static void main(String[] args)
  10. {
  11. //Java object. We will convert it to XML.
  12. Employee employee = new Employee(1, "Lokesh", "Gupta", new Department(101, "IT"));
  13. //Method which uses JAXB to convert object to XML
  14. jaxbObjectToXML(employee);
  15. }
  16. private static void jaxbObjectToXML(Employee employee)
  17. {
  18. try
  19. {
  20. //Create JAXB Context
  21. JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
  22. //Create Marshaller
  23. Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
  24. //Required formatting??
  25. jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
  26. //Print XML String to Console
  27. StringWriter sw = new StringWriter();
  28. //Write XML to StringWriter
  29. jaxbMarshaller.marshal(employee, sw);
  30. //Verify XML Content
  31. String xmlContent = sw.toString();
  32. System.out.println( xmlContent );
  33. } catch (JAXBException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }

程序输出。

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <employee>
  3. <department>
  4. <id>101</id>
  5. <name>IT</name>
  6. </department>
  7. <firstName>Lokesh</firstName>
  8. <id>1</id>
  9. <lastName>Gupta</lastName>
  10. </employee>

2)将 Java 对象转换为 XML 文件

将 XML 写入文件与上面的示例非常相似。 您只需要提供要在其中写入文件的 XML 文件位置即可。

  1. package com.howtodoinjava.demo;
  2. import java.io.File;
  3. import java.io.StringWriter;
  4. import javax.xml.bind.JAXBContext;
  5. import javax.xml.bind.JAXBException;
  6. import javax.xml.bind.Marshaller;
  7. public class JaxbExample
  8. {
  9. public static void main(String[] args)
  10. {
  11. //Java object. We will convert it to XML.
  12. Employee employee = new Employee(1, "Lokesh", "Gupta", new Department(101, "IT"));
  13. //Method which uses JAXB to convert object to XML
  14. jaxbObjectToXML(employee);
  15. }
  16. private static void jaxbObjectToXML(Employee employee)
  17. {
  18. try
  19. {
  20. //Create JAXB Context
  21. JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
  22. //Create Marshaller
  23. Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
  24. //Required formatting??
  25. jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
  26. //Store XML to File
  27. File file = new File("employee.xml");
  28. //Writes XML file to file-system
  29. jaxbMarshaller.marshal(employee, file);
  30. }
  31. catch (JAXBException e)
  32. {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

程序输出:

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <employee>
  3. <department>
  4. <id>101</id>
  5. <name>IT</name>
  6. </department>
  7. <firstName>Lokesh</firstName>
  8. <id>1</id>
  9. <lastName>Gupta</lastName>
  10. </employee>

3)读取 XML 的示例

如果要再次从文件读取 XML 到 Java 对象,请使用此方法。

  1. String fileName = "employee.xml";
  2. //Call method which read the XML file above
  3. jaxbXmlFileToObject(fileName);
  4. private static void jaxbXmlFileToObject(String fileName) {
  5. File xmlFile = new File(fileName);
  6. JAXBContext jaxbContext;
  7. try
  8. {
  9. jaxbContext = JAXBContext.newInstance(Employee.class);
  10. Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
  11. Employee employee = (Employee) jaxbUnmarshaller.unmarshal(xmlFile);
  12. System.out.println(employee);
  13. }
  14. catch (JAXBException e)
  15. {
  16. e.printStackTrace();
  17. }
  18. }

程序输出:

  1. Employee [id=1, firstName=Lokesh, lastName=Gupta, department=Department [id=101, name=IT]]

将我的问题放在评论部分。

学习愉快!