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对象进行相互转换. 本文以一个简单的例 ...
随机推荐
- Python:一些小知识
小知识点总结 一.Python2与Python3 的区别 1.Python2中可以加括号输出,也可不加输出 Python3中必须加 2.python2 中有xrange(生成器)也有range ...
- Jupyter notebook 的一个问题
Traceback (most recent call last): File , in get value = obj._trait_values[self.name] KeyError: 'all ...
- maven 项目运行找不到类
其实maven 仓库有jar包,可能未编译或破损, 在本地仓删除它,然后maven install
- 第12章 GPIO输出—使用固件库点亮LED
本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 利用库建立好的工程模板,就可以方便地使用STM32 H ...
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f4-hystrix/ 本文出自方志朋的博客 在微服务架构中, ...
- Python 学习笔记(八)Python列表(二)
列表函数 追加和扩展 list.append() 在列表末尾追加新的对象 >>> dir(list) #dir 查看列表的函数 ['__add__', '__class__', '_ ...
- 零基础Python知识点回顾(一)
如果你是小白,建议只要安装官网的python-3.7.0-amd64.exe 然后在电脑cmd命令提示符 输入检查是否已经安装pip,一般安装了python都会有的. >pip ...
- SpringBoot学习16:springboot整合junit单元测试
1.创建maven项目,修改pom.xml文件 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springfram ...
- SmallMQ发布
最近一直学习,主要处理java的分布式,MQ,RPC,通信,数据库,缓存等方向. 一般现在的MQ都是企业级的,庞大,功能齐全.最主要是代码量大,对于我们这些小程序员而言,太大,修改困难,修复更加困难, ...
- Java程序如何生成Jar 执行文件(2)
一.用Eclipse生产Jar文件 注意:此方法可以打包含有第三方jar包的项目 1. 首先,右键你的Java工程,选择Export,在Java文件夹下选择Runnable JAR file,如下图所 ...