XStream轻松转换xml和java对象
首先引入所需的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。
XStream轻松转换xml和java对象的更多相关文章
- 使用XStream是实现XML与Java对象的转换(6)--持久化
九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...
- 使用XStream是实现XML与Java对象的转换(4)--转换器
七.转换器(Converter) 我们程序中的POJO是千变万化的,而且需求也是千奇百怪的,所以XStream中的内置的转换器的功能不一定能够满足我们的要求,所以我们就需要自己构建转换器. 1,一个基 ...
- 使用XStream是实现XML与Java对象的转换(3)--注解
六.使用注解(Annotation) 总是使用XStream对象的别名方法和注册转换器,会让人感到非常的乏味,又会产生很多重复性代码,于是我们可以使用注解的方式来配置要序列化的POJO对象. 1,最基 ...
- 使用XStream是实现XML与Java对象的转换(2)--别名
五.使用别名(Alias) 首先,有这样一段Java代码: import java.util.ArrayList; import java.util.List; import com.thoughtw ...
- 使用XStream是实现XML与Java对象的转换(1)--简介及入门示例
一.简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象.Json数据的转换.它不需要schema或其他的mapping文件就可以进行java对象和xml ...
- 使用XStream是实现XML与Java对象的转换(5)--Object Stream
八,Object Stream 之前的例子我们都是直接输出Xml成为String类型或者从String中获得并解析Xml,现在我们要处理输入流和输出流! 1,输出流(ObjectOutputStrea ...
- JAXB轻松转换xml对象和java对象
实体类如下: package com.cn.entity; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; ...
- 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中“不规矩”的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧,调整一下思维便能重用 ...
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换. 本文以一个简单的例 ...
随机推荐
- 【BZOJ3495】PA2010 Riddle
题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多 ...
- 整个ssd的网络和multibox_loss_layer
总结说来prior_box层只完成了一个提取anchor的过程,其他与gt的match,筛选正负样本比例都是在multibox_loss_layer完成的 http://www.360doc.com/ ...
- CentOS 7.1上安装.Net Core
官方网站给出了几条命令: sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/f ...
- React.js 中文文档
转自http://react-china.org/t/react-js/398的jsgeeker 中文文档地址 http://reactjs.cn GitHub地址 https://github.co ...
- servlet三种方式实现servlet接口
简单介绍 Servlet接口实现类 1.Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet.HttpServlet. 2.HttpServlet指能够处理HTTP请 ...
- intellij idea下载安装以及创建项目(输出Hello World)
主题一:下载 第一:可以百度下载 第二:直接进行官网链接下载地址:http://www.jetbrains.com/idea/ 第一步: 第二步: 下载完成后进行安装 主题二:安装 点击Next速度可 ...
- js标准对象
在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; //'n ...
- 看我如何使用IDEA引入GitHub上的Maven项目,从Clone到打开,图文步骤,你绝对看的懂!!
废话不多说,就一个字:干! 1.登录GitHub,复制项目仓库的地址 2.打开IDEA,选择git(三种方式选择) 第一种方式: 第二种方式: 第三种方式: 选择git后 3.下面是我改存放的目录 正 ...
- SQL:检索数据-基本检索
检索数据 1.select语句 增删改查四大操作之"查",即检索: 一般包括:what,where:查什么,从哪里选择 2.检索单个列 例:想从products表中检索名为prod ...
- jdbc学习笔记03
作业: 1. 学生表(id,age,name) 2. 插入学生 3. 修改学生 4. 删除学生 5. 查询学生 JavaBean 俗称简单的Java对象 javaBean满足以下三点 1.私有属性 2 ...