XStream轻松转换xml和java对象
2024-08-27 10:51:03
首先引入所需的jar:
xstream-1.4.9、xpp3_min-1.1.4c、dom4j-1.6.1,
或用maven管理jar包时在pom.xml中添加:
<!-- 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...
}
XStream工具类:
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。
最新文章
- linux中who命令显示的tty、pts和(:0)(:0.0)是什么意思
- noi 6045 开餐馆
- js ==与===区别(两个等号与三个等号)
- html文本框(input)不保存缓存记录
- Python的类实例属性访问规则
- java Process的waitFor()
- 31、activity 四种工作模式
- Codeforces245H - Queries for Number of Palindromes(区间DP)
- 西安Uber优步司机奖励政策(2月1日~2月7日)
- java GBK字符转换成为UTF-8编码字符
- POJ 3589 Number-guessing Game(简单题)
- jQuery HighchartsTableHTML表格转Highcharts图表插件
- CSA单点登录环境配置
- 修改CUSTOM.PLL文件调用客户化FORM&;修改标准FORM
- POI操作Excel详解,读取xls和xlsx格式的文件
- [CQOI2016]K远点对
- android studio marvin 配置
- hdu 1756(判断点是否在多边形中)
- Webbrowser指定IE内核版本(更改注册表)
- 验证Xpath和CSS 路径是否有效