XStream轻松转换xml和java对象
- 工作小总结
- 时间:2021-10-23 19:11
- 3411人已阅读
简介
在工作中,我们经常会遇到xml和Java对象之间的转换,可以使用Xstream轻松实现转换
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream --> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.9</version> </dependency> <!-- https://mvnrepository.com/artifact/xpp3/xpp3_min --> <dependency> <groupId>xpp3</groupId> <artifactId>xpp3_min</artifactId> <version>1.1.4c</version> </dependency> <!-- https://mvnrepository.com/artifact/dom4j/dom4j --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
package com.cn.entity;
public class Address {
//国
private String country;
//省
private String province;
//市
private String city;
//县
private String county;
//镇
private String town;
get...
set...
}package com.cn.entity;
import java.util.List;
public class Person {
//姓名
private String name;
//性别
private String sex;
//年龄
private int age;
//地址
private List<Address> Address;
get...
set...
}package com.cn.util;
import com.cn.entity.Address;
import com.cn.entity.Person;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
/**
* XStream工具类
* @author sun.kai
* 2016年8月13日
*/
public class XStreamUtil {
private static XStream xStream;
//JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
static{
xStream = new XStream(new DomDriver());
/*
* 使用xStream.alias(String name, Class Type)为任何一个自定义类创建到类到元素的别名
* 如果不使用别名,则生成的标签名为类全名
*/
xStream.alias("person", Person.class);
xStream.alias("address", Address.class);
//将某一个类的属性,作为xml头信息的属性,而不是子节点
xStream.useAttributeFor(Address.class, "country");
//对属性取别名
xStream.aliasField("省", Address.class,"province");
}
//xml转java对象
public static Object xmlToBean(String xml){
return xStream.fromXML(xml);
}
//java对象转xml
public static String beanToXml(Object obj){
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xStream.toXML(obj);
}
}package com.test.test;
import java.util.ArrayList;
import java.util.List;
import com.cn.entity.Address;
import com.cn.entity.Person;
import com.cn.util.XStreamUtil;
public class TestXStream {
public static void main(String[] args) {
long time1 = System.currentTimeMillis();
//测试java对象转xml,java对象中包含集合对象
Person person = new Person();
person.setName("admin管理员");
person.setSex("男");
person.setAge(25);
List<Address> adds = new ArrayList<Address>();
Address address1 = new Address();
address1.setCountry("中国");
address1.setProvince("安徽");
address1.setCity("宿州");
address1.setCounty("萧县");
Address address2 = new Address();
address2.setCountry("中国");
address2.setProvince("上海");
address2.setCity(null);
address2.setCounty("");
adds.add(address1);
adds.add(address2);
person.setAddress(adds);
String xml = XStreamUtil.beanToXml(person);
System.out.println(xml);
//测试xml转java对象
Person person2 = (Person) XStreamUtil.xmlToBean(xml);
System.out.println(person2.getAddress().get(1).getProvince());
long time2 = System.currentTimeMillis();
System.out.println((time2-time1)+"ms");
}
}<?xml version="1.0" encoding="UTF-8"?> <person> <name>admin管理员</name> <sex>男</sex> <age>25</age> <Address> <address country="中国"> <省>安徽</省> <city>宿州</city> <county>萧县</county> </address> <address country="中国"> <省>上海</省> <county></county> </address> </Address> </person> 上海 669ms
总结: (1) XStream是一个可以将javaBean与XML双向转换的java类库。 (2) Java到xml,使用toXML()方法;xml到Java,用fromXML()方法。 (3) 类别名,用alias(String name, Class type)。 (4) 类成员别名,用aliasField(String alias, Class definedIn, String fieldName)。 (5) 将某一个类的属性,作为xml头信息的属性,而不是子节点,用useAttributeFor(Class definedIn, String fieldName)。 (5) 类成员作为属性别名,用 aliasAttribute(Class definedIn, String attributeName, String alias),单独命名没有意义,还要通过useAttributeFor(Class definedIn, String fieldName) 应用到某个类上。 (6) XStream默认当String类型的属性值为null时不封装到xml中。可以根据实际传xml情况,选择对象属性set空字符串还是null。 ———————————————— 版权声明:本文为CSDN博主「BESTSK」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/aqsunkai/article/details/52196645