XStream(xml/bean转换)
XStream
1. 什么作用
* 可以把JavaBean转换为(序列化为)xml
* 核心JAR包:xstream-1.4.7.jar;
* 必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);
* XStream xstream = new XStream();
* String xmlStr = xstream.toXML(javabean);
* 别名:把类型对应的元素名修改了
> xstream.alias("china", List.class):让List类型生成的元素名为china
> xstream.alias("province", Province.class):让Province类型生成的元素名为province
* 使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
> xstream.useAttributeFor(Province.class, "name"):把Province类的名为name成员,生成<province>元素的name属性
* 去除Collection类型的成名:我们只需要Collection的内容,而不希望Collection本身也生成一个元素
> xstream.addImplicitCollection(Province.class, "cities"):让Province类的名为cities(它是List类型的,它的内容还会生成元素)的成名不生成元素
* 去除类的指定成名,让其不生成xml元素
> xstream.omitField(City.class, "description"):在生成的xml中不会出现City类的名为description的对应的元素!
具体实例
- package cn.itcast.demo1;
- import java.util.ArrayList;
- import java.util.List;
- import org.junit.Test;
- import com.thoughtworks.xstream.XStream;
- /**
- * 演示XStream
- * @author cxf
- *
- */
- public class Demo1 {
- // 返回javabean集合
- public List<Province> getProinvceList() {
- Province p1 = new Province();
- p1.setName("北京");
- p1.addCity(new City("东城区", "DongChengQu"));
- p1.addCity(new City("昌平区", "ChangPingQu"));
- Province p2 = new Province();
- p2.setName("辽宁");
- p2.addCity(new City("沈阳", "shenYang"));
- p2.addCity(new City("葫芦岛", "huLuDao"));
- List<Province> provinceList = new ArrayList<Province>();
- provinceList.add(p1);
- provinceList.add(p2);
- return provinceList;
- }
- /**
- <list> --> List类型显示list
- <cn.itcast.demo1.Province> --> javabean的类型为Province,它元素的名称为类的完整名
- <name>北京</name> --> javabean的属性名
- <cities> --> javabean的属性名
- <cn.itcast.demo1.City> --> 类名
- <name>东城区</name> --> 属性名
- <description>DongChengQu</description> --> 属性名
- </cn.itcast.demo1.City>
- <cn.itcast.demo1.City>
- <name>昌平区</name>
- <description>ChangPingQu</description>
- </cn.itcast.demo1.City>
- </cities>
- </cn.itcast.demo1.Province>
- <cn.itcast.demo1.Province>
- <name>辽宁</name>
- <cities>
- <cn.itcast.demo1.City>
- <name>沈阳</name>
- <description>shenYang</description>
- </cn.itcast.demo1.City>
- <cn.itcast.demo1.City>
- <name>葫芦岛</name>
- <description>huLuDao</description>
- </cn.itcast.demo1.City>
- </cities>
- </cn.itcast.demo1.Province>
- </list>
- */
- @Test
- public void fun1() {
- List<Province> proList = getProinvceList();
- /*
- * 创建XStream对象
- * 调用toXML把集合转换成xml字符串
- */
- XStream xstream = new XStream();
- String s = xstream.toXML(proList);
- System.out.println(s);
- }
- /*
- * 别名(alias)
- * 希望:
- * * 默认List类型对应<list>元素,希望让List类型对应<china>元素
- * * 默认Province类型对应<cn.itcast.demo1.Province>,希望让它对应<province>
- * * 默认City类型对应<cn.itcast.demo1.City>,希望它对应<city>元素
- */
- /*
- <china>
- <province>
- <name>北京</name>
- <cities>
- <city>
- <name>东城区</name>
- <description>DongChengQu</description>
- </city>
- <city>
- <name>昌平区</name>
- <description>ChangPingQu</description>
- </city>
- </cities>
- </province>
- <province>
- <name>辽宁</name>
- <cities>
- <city>
- <name>沈阳</name>
- <description>shenYang</description>
- </city>
- <city>
- <name>葫芦岛</name>
- <description>huLuDao</description>
- </city>
- </cities>
- </province>
- </china>
- */
- @Test
- public void fun2() {
- List<Province> proList = getProinvceList();
- XStream xstream = new XStream();
- /*
- * 给指定的类型指定别名
- */
- xstream.alias("china", List.class);//给List类型指定别名为china
- xstream.alias("province", Province.class);//给Province指定别名为province
- xstream.alias("city", City.class);//给City类型指定别名为city
- String s = xstream.toXML(proList);
- System.out.println(s);
- }
- /*
- * 默认javabean的属性都会生成子元素,而现在希望生成元素的属性
- */
- /*
- <china>
- <province name="北京">
- <cities>
- <city>
- <name>东城区</name>
- <description>DongChengQu</description>
- </city>
- <city>
- <name>昌平区</name>
- <description>ChangPingQu</description>
- </city>
- </cities>
- </province>
- <province name="辽宁">
- <cities>
- <city>
- <name>沈阳</name>
- <description>shenYang</description>
- </city>
- <city>
- <name>葫芦岛</name>
- <description>huLuDao</description>
- </city>
- </cities>
- </province>
- */
- @Test
- public void fun3() {
- List<Province> proList = getProinvceList();
- XStream xstream = new XStream();
- xstream.alias("china", List.class);//给List类型指定别名为china
- xstream.alias("province", Province.class);//给Province指定别名为province
- xstream.alias("city", City.class);//给City类型指定别名为city
- /*
- * 把Province类型的name属性,生成<province>元素的属性
- */
- xstream.useAttributeFor(Province.class, "name");
- String s = xstream.toXML(proList);
- System.out.println(s);
- }
- /*
- * 去除List类型的属性,只把list中的元素生成xml元素
- */
- /*
- <china>
- <province name="北京">
- <city>
- <name>东城区</name>
- <description>DongChengQu</description>
- </city>
- <city>
- <name>昌平区</name>
- <description>ChangPingQu</description>
- </city>
- </province>
- <province name="辽宁">
- <city>
- <name>沈阳</name>
- <description>shenYang</description>
- </city>
- <city>
- <name>葫芦岛</name>
- <description>huLuDao</description>
- </city>
- </province>
- </china>
- */
- @Test
- public void fun4() {
- List<Province> proList = getProinvceList();
- XStream xstream = new XStream();
- xstream.alias("china", List.class);//给List类型指定别名为china
- xstream.alias("province", Province.class);//给Province指定别名为province
- xstream.alias("city", City.class);//给City类型指定别名为city
- xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性
- /*
- * 去除<cities>这样的Collection类型的属性
- * 去除Provice类的名为cities的List类型的属性!
- */
- xstream.addImplicitCollection(Province.class, "cities");
- String s = xstream.toXML(proList);
- System.out.println(s);
- }
- /**
- * 去除不想要的javabean属性
- * 就是让某引起javabean属性,不生成对应的xml元素!
- */
- /*
- <china>
- <province name="北京">
- <city>
- <name>东城区</name>
- </city>
- <city>
- <name>昌平区</name>
- </city>
- </province>
- <province name="辽宁">
- <city>
- <name>沈阳</name>
- </city>
- <city>
- <name>葫芦岛</name>
- </city>
- </province>
- </china>
- */
- @Test
- public void fun5() {
- List<Province> proList = getProinvceList();
- XStream xstream = new XStream();
- xstream.alias("china", List.class);//给List类型指定别名为china
- xstream.alias("province", Province.class);//给Province指定别名为province
- xstream.alias("city", City.class);//给City类型指定别名为city
- xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性
- xstream.addImplicitCollection(Province.class, "cities");//去除Provice类的名为cities的List类型的属性!
- /*
- * 让City类的,名为description属性不生成对应的xml元素
- */
- xstream.omitField(City.class, "description");
- String s = xstream.toXML(proList);
- System.out.println(s);
- }
- }
XStream(xml/bean转换)的更多相关文章
- SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转
SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...
- SpringMVC源码阅读:Json,Xml自动转换
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- Spring源码-IOC部分-Xml Bean解析注册过程【3】
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...
- 项目中运行报错: Loading XML bean definitions from class path resource [applicationContext.xml]
记录一下: org.springframework.context.support.AbstractApplicationContext prepareRefresh Refreshing org.s ...
- 将bean转换成键值列表
日常开发中在进行接口对接的数据传输时,有一种场景是将bean转成jsonString,这里可以将bean转换成Map再转成jsonString. 工具类如下: public static String ...
- 利用JAXB实现java实体类和xml互相转换
1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...
- 将Xml字符串转换成(DataTable || DataSet || XML)对象
今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...
- json串转化成xml文件、xml文件转换成json串
1.json串转化成xml文件 p=[{"name":"tom","age":30,"sex":"男" ...
- JAXB实现java对象与xml之间转换
JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...
随机推荐
- Netty--使用TCP协议传输文件
简介: 用于将文件通过TCP协议传输到另一台机器,两台机器需要通过网络互联. 实现: 使用Netty进行文件传输,服务端读取文件并将文件拆分为多个数据块发送,接收端接收数据块,并按顺序将数据写入文件. ...
- bzoj 1023: [SHOI2008]cactus仙人掌图 2125: 最短路 4728: 挪威的森林 静态仙人掌上路径长度的维护系列
%%% http://immortalco.blog.uoj.ac/blog/1955 一个通用的写法是建树,对每个环建一个新点,去掉环上的边,原先环上每个点到新点连边,边权为点到环根的最短/长路长度 ...
- log4j示例-Daily方式(log4j.properties)
log_home=./log log4j.rootLogger=info log4j.category.com.ai.toptea.collection=Console,DailyFile,Daily ...
- 020:Buffer Pool 、压缩页、CheckPoint、Double Write、Change Buffer
一. 缓冲池(Buffer Pool) 1.1 缓冲池介绍 每次读写数据都是通过 Buffer Pool : 当Buffer Pool 中没有用户所需要的数据时,才去硬盘中获取: 通过 innodb_ ...
- PyQt5对话框
QinputDialog 输入的值可以是字符串,数字,或者一个项目从一个列表 def showDialog(self): text, ok = QInputDialog.getText(self, ' ...
- 论 html与css的关系
一.网页前端三剑客基础介绍 1-1 Html和CSS的关系学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTM ...
- 12.solr学习速成之dataimport
solr除了利用solrj建立索引外,还可以由列式数据库hbase触发器添加索引,自动全量或者增量索引关系数据库数据等. dataimport可以配置从任何关系数据库导入索引 1.将jar包拷贝到to ...
- Oracle11gR2-聚簇因子浅析
创建表t1,t2 SQL> conn n1/n1 Connected. SQL> SQL> SQL> create table t1 as select trunc(rownu ...
- jaegeropentracing的Java-client
关于jaegeropentracing的Java-client做记录如下: 1.依赖jar包 <!-- 以下jar包是jaegeropentracing依赖的日志jar -->slf4j- ...
- map的访问
映射表(map) 在每个条目被插入时将之按键进行排序.取迭代器指向值时将返回value_type结构,它有两个数据成员:first,second.访问first获得键的数据,访问second获得值的数 ...