使用JAXB实现JAVA对象和XML字符串的互相转换

╰半夏微凉° 2023-10-06 00:23 41阅读 0赞

本文转自:https://blog.csdn.net/qq\_32786873/article/details/71817149

关于JAXB的介绍,见:http://blog.csdn.net/qq\_32786873/article/details/71715254

测试类:

  1. package com.solin.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Test {
  5. public static void main(String[] args) {
  6. Student student = new Student();
  7. student.setName("邪恶小法师");
  8. student.setAge("110");
  9. student.setSex("男");
  10. List<Student.Friend> list = new ArrayList<>();
  11. Student.Friend f1 = new Student.Friend();
  12. f1.setName("德玛西亚之力");
  13. f1.setAge("888");
  14. f1.setSex("男");
  15. Student.Friend f2 = new Student.Friend();
  16. f2.setName("无双剑姬");
  17. f2.setAge("898");
  18. f2.setSex("女");
  19. list.add(f1);
  20. list.add(f2);
  21. student.setFriend(list);
  22. //将java对象转换为XML字符串
  23. String xmlStr = XmlAnd;
  24. System.out.println(xmlStr);
  25. //将xml字符串转换为java对象
  26. System.out.println(XmlAndJavaObjectConvert.convertXmlStrToObject(Student.class, xmlStr));
  27. }
  28. }
  29. 实体类:
  30. package com.solin.test;
  31. import java.util.List;
  32. import javax.xml.bind.annotation.XmlElementWrapper;
  33. import javax.xml.bind.annotation.XmlRootElement;
  34. import javax.xml.bind.annotation.XmlType;
  35. //XML文件中的根标识
  36. @XmlRootElement(name = "Student")
  37. //控制JAXB 绑定类中属性和字段的排序
  38. @XmlType(propOrder = {
  39. "name",
  40. "age",
  41. "sex",
  42. "friend"
  43. })
  44. public class Student {
  45. private String name;
  46. private String age;
  47. private String sex;
  48. private List<Friend> friend;
  49. public String getName() {
  50. return name;
  51. }
  52. public void setName(String name) {
  53. this.name = name;
  54. }
  55. public String getAge() {
  56. return age;
  57. }
  58. public void setAge(String age) {
  59. this.age = age;
  60. }
  61. public String getSex() {
  62. return sex;
  63. }
  64. public void setSex(String sex) {
  65. this.sex = sex;
  66. }
  67. @XmlElementWrapper(name="friendList")
  68. public List<Friend> getFriend() {
  69. return friend;
  70. }
  71. public void setFriend(List<Friend> friend) {
  72. this.friend = friend;
  73. }
  74. @Override
  75. public String toString() {
  76. return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", friendList=" + friend + "]";
  77. }
  78. public static class Friend{
  79. private String name;
  80. private String age;
  81. private String sex;
  82. public String getName() {
  83. return name;
  84. }
  85. public void setName(String name) {
  86. this.name = name;
  87. }
  88. public String getAge() {
  89. return age;
  90. }
  91. public void setAge(String age) {
  92. this.age = age;
  93. }
  94. public String getSex() {
  95. return sex;
  96. }
  97. public void setSex(String sex) {
  98. this.sex = sex;
  99. }
  100. @Override
  101. public String toString() {
  102. return "Friend [name=" + name + ", age=" + age + ", sex=" + sex + "]";
  103. }
  104. }
  105. }
  106. 工具类:
  107. package com.solin.test;
  108. import java.io.StringReader;
  109. import java.io.StringWriter;
  110. import javax.xml.bind.JAXBContext;
  111. import javax.xml.bind.JAXBException;
  112. import javax.xml.bind.Marshaller;
  113. import javax.xml.bind.Unmarshaller;
  114. public class XmlAndJavaObjectConvert {
  115. public static String convertToXml(Object obj) {
  116. // 创建输出流
  117. StringWriter sw = new StringWriter();
  118. try {
  119. // 利用jdk中自带的转换类实现
  120. JAXBContext context = JAXBContext.newInstance(obj.getClass());
  121. Marshaller marshaller = context.createMarshaller();
  122. // 格式化xml输出的格式
  123. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
  124. Boolean.TRUE);
  125. // 将对象转换成输出流形式的xml
  126. marshaller.marshal(obj, sw);
  127. } catch (JAXBException e) {
  128. e.printStackTrace();
  129. }
  130. return sw.toString();
  131. }
  132. public static Object convertXmlStrToObject(Class clazz, String xmlStr) {
  133. Object xmlObject = null;
  134. try {
  135. JAXBContext context = JAXBContext.newInstance(clazz);
  136. // 进行将Xml转成对象的核心接口
  137. Unmarshaller unmarshaller = context.createUnmarshaller();
  138. StringReader sr = new StringReader(xmlStr);
  139. xmlObject = unmarshaller.unmarshal(sr);
  140. } catch (JAXBException e) {
  141. e.printStackTrace();
  142. }
  143. return xmlObject;
  144. }
  145. }

发表评论

表情:
评论列表 (有 0 条评论,41人围观)

还没有评论,来说两句吧...

相关阅读