使用XStream实现Xml与Java对象转换(XML)
XStream 是一个流行的 Java 库,用于将对象序列化为 XML 格式或将 XML 数据反序列化为对象。它允许 Java 开发人员轻松地处理 XML 数据和 Java 对象之间的转换,而无需手动编写繁琐的 XML 解析和生成代码
示例如下:
1、首先,引入相应的maven依赖
1 <dependency>
2 <groupId>com.thoughtworks.xstream</groupId>
3 <artifactId>xstream</artifactId>
4 <version>1.4.20</version>
5 </dependency>
2、创建实体类
1 @Data
2 @XStreamAlias("部门列表")
3 public class Department {
4
5 @XStreamAlias("部门名称")
6 private String name;
7
8 @XStreamAlias("联系电话")
9 private String phone;
10
11 @XStreamAlias("员工")
12 private User user;
13 }
1 @Data
2 @XStreamAlias("员工")
3 public class User {
4
5 @XStreamAlias("姓名")
6 private String name;
7
8 @XStreamAlias("年龄")
9 private Integer age;
10
11 @XStreamAlias("性别")
12 private String sex;
13 }
3、创建一个实现Xml转换的工具类
1 public class XmlUtils {
2 /**
3 * xstream初始化
4 */
5 private static final XStream XSTREAM = new XStream(new DomDriver());
6 /**
7 * 添加合法的包名,否则无法解析xml,使用时需要改成自己工程的包名
8 */
9 private static final String PACKET = "com.example.demo.**";
10
11 /**
12 * 将xml字符串转为department对象
13 *
14 * @param xmlString xml字符串
15 */
16 public static Department xmlToDepart(String xmlString) {
17 XSTREAM.allowTypesByWildcard(new String[]{PACKET});
18 XSTREAM.processAnnotations(Department.class);
19 return (Department) XSTREAM.fromXML(xmlString);
20 }
21
22 /**
23 * 将department对象转为xml字符串
24 */
25 public static String departToXml(Department department) {
26 //设置别名映射
27 XSTREAM.processAnnotations(Department.class);
28 // 转换的字符串前面加上xml说明
29 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + XSTREAM.toXML(department);
30 }
31 }
4、在测试类中进行转换测试
4.1、将Java对象转换为Xml字符串并导出
1 @Test
2 void ToXml() {
3 try {
4
5 User user = new User();
6 user.setName("Tom");
7 user.setAge(11);
8 user.setSex("男");
9
10 Department department = new Department();
11 department.setName("研发部");
12 department.setPhone("13188887777");
13 department.setUser(user);
14
15 // Java对象转换成xml字符串
16 String xml = XmlUtils.departToXml(department);
17
18 FileWriter writer = null;
19 writer = new FileWriter("C:\\Users\\16056\\Desktop\\test.xml", false);
20 writer.write(xml);
21 writer.flush();
22 writer.close();
23
24 } catch (Exception e) {
25 e.printStackTrace();
26 }
27 }
测试结果

4.2、导入Xml文件并转换为Java对象
1 @Test
2 void ToObj(){
3 File file = new File("C:\\Users\\16056\\Desktop\\test.xml");
4 long fileLengthLong = file.length();
5 byte[] fileContent = new byte[(int) fileLengthLong];
6 try {
7 FileInputStream inputStream = new FileInputStream(file);
8 inputStream.read(fileContent);
9 inputStream.close();
10 String string = new String(fileContent);
11
12 // xml字符串转换成对象
13 Department department = XmlUtils.xmlToDepart(string);
14
15 System.out.println("department:" + department);
16
17 } catch (Exception e) {
18 e.printStackTrace();
19 }
20 }
tip:fileContent不能使用toString方法,因为返回值是对象名称+哈希值,例byte[]@1a2b3c4d
测试结果:


浙公网安备 33010602011771号