XStream使用笔记
XStream是一个可以将JavaBean生成XML的工具,很方便的帮助我们在后台服务器将数据序列化为XML,接下来就可以将XML数据响应给前台进行数据交互
XStream需要的jar包
* 核心JAR包:xstream.jar
* 必须依赖包:xpp3_min.jar(XML Pull Parser,一款速度很快的XML解析器)
使用起来非常简单,先把XStream对象给new出来:
XStream xstream = new XStream();
接着就可以使用XStream的对象中的方法,最常用最简单就是toXML()方法,直接就可以生成xml格式的字符串
示例代码
既然XStream可以将JavaBean转换为xml,那我们就先处理JavaBean,我想处理一个省市联动的例子(就是一个省显示其对应的市) :
city.java:
public class City {
private String name;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public City() {
super();
}
public City(String name) {
super();
this.name = name;
}
public City(String name, String description) {
super();
this.name = name;
this.description = description;
}
}
给出市类的构造函数,方便给值
Province.java:
import java.util.ArrayList;
import java.util.List; public class Province {
private String name; private List<City> citys=new ArrayList<City>(); public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public List<City> getCitys() {
return citys;
} public void setCitys(List<City> citys) {
this.citys = citys;
} public void addCitys(City city){
citys.add(city);
}
}
添加一个List集合存放该省的市,addCitys()方法就是给省添加市的方法
JavaBean处理好之后,我们就可以添加省市:
public List<Province> getProvinceList(){
Province province1=new Province();
province1.setName("北京");
province1.addCitys(new City("朝阳区","chaoyang"));
province1.addCitys(new City("东城区","dongcheng"));
Province province2=new Province();
province2.setName("河南");
province2.addCitys(new City("郑州","zhengzhou"));
province2.addCitys(new City("洛阳","luoyang"));
List<Province> list=new ArrayList<Province>();
list.add(province1);
list.add(province2);
return list;
}
接下来就可以使用了:
/**
* 简单使用XStream
*/
@Test
public void fun1(){
List<Province> list=getProvinceList();
XStream xStream=new XStream();
String xml = xStream.toXML(list);
System.out.println(xml);
}
显示的数据格式:
<list>
<cn.lynu.model.Province>
<name>北京</name>
<citys>
<cn.lynu.model.City>
<name>朝阳区</name>
<description>chaoyang</description>
</cn.lynu.model.City>
<cn.lynu.model.City>
<name>东城区</name>
<description>dongcheng</description>
</cn.lynu.model.City>
</citys>
</cn.lynu.model.Province>
<cn.lynu.model.Province>
<name>河南</name>
<citys>
<cn.lynu.model.City>
<name>郑州</name>
<description>zhengzhou</description>
</cn.lynu.model.City>
<cn.lynu.model.City>
<name>洛阳</name>
<description>luoyang</description>
</cn.lynu.model.City>
</citys>
</cn.lynu.model.Province>
</list>
根标签是list,是因为我们就是将省放在list中的
显示为list,并且显示的是完整的类名称,我们给它取个别名(使用alias()方法):
/**
* 取别名
*/
@Test
public void fun2(){
List<Province> list=getProvinceList();
XStream xStream=new XStream();
xStream.alias("china", List.class);
xStream.alias("province", Province.class);
xStream.alias("city", City.class);
System.out.println(xStream.toXML(list));
}
显示的数据格式:
<china>
<province>
<name>北京</name>
<citys>
<city>
<name>朝阳区</name>
<description>chaoyang</description>
</city>
<city>
<name>东城区</name>
<description>dongcheng</description>
</city>
</citys>
</province>
<province>
<name>河南</name>
<citys>
<city>
<name>郑州</name>
<description>zhengzhou</description>
</city>
<city>
<name>洛阳</name>
<description>luoyang</description>
</city>
</citys>
</province>
</china>
嗯,格式格式好看多了
可以看到province和city都有name的子标签,我们可以把name变为它们的属性值(使用useAttributeFor()方法):
/**
* 将类的属相变成标签的属性
*/
@Test
public void fun3(){
List<Province> list=getProvinceList();
XStream xStream=new XStream();
xStream.alias("china", List.class);
xStream.alias("province", Province.class);
xStream.alias("city", City.class); xStream.useAttributeFor(Province.class, "name");
xStream.useAttributeFor(City.class, "name"); System.out.println(xStream.toXML(list));
}
显示的数据格式:
<china>
<province name="北京">
<citys>
<city name="朝阳区">
<description>chaoyang</description>
</city>
<city name="东城区">
<description>dongcheng</description>
</city>
</citys>
</province>
<province name="河南">
<citys>
<city name="郑州">
<description>zhengzhou</description>
</city>
<city name="洛阳">
<description>luoyang</description>
</city>
</citys>
</province>
</china>
格式又精简了不少
我们可以看到竟然还有个<citys>标签,这是因为我把city也放在一个list中给province,我们可以隐藏该标签
(使用addImplicitArray()方法):
/**
* 隐藏某个标签
*/
@Test
public void fun4(){
List<Province> list=getProvinceList();
XStream xStream=new XStream();
xStream.alias("china", List.class);
xStream.alias("province", Province.class);
xStream.alias("city", City.class);
xStream.useAttributeFor(Province.class, "name");
xStream.useAttributeFor(City.class, "name"); xStream.addImplicitArray(Province.class, "citys"); System.out.println(xStream.toXML(list));
}
显示的数据格式为:
<china>
<province name="北京">
<city name="朝阳区">
<description>chaoyang</description>
</city>
<city name="东城区">
<description>dongcheng</description>
</city>
</province>
<province name="河南">
<city name="郑州">
<description>zhengzhou</description>
</city>
<city name="洛阳">
<description>luoyang</description>
</city>
</province>
</china>
我们可以看到city标签中还有一个<description>子标签,我们也可以删除这个标签(如果不需要使用omitField()方法):
/**
* 删除某个标签
*/
@Test
public void fun5(){
List<Province> list=getProvinceList();
XStream xStream=new XStream();
xStream.alias("china", List.class);
xStream.alias("province", Province.class);
xStream.alias("city", City.class);
xStream.useAttributeFor(Province.class, "name");
xStream.useAttributeFor(City.class, "name");
xStream.addImplicitArray(Province.class, "citys"); xStream.omitField(City.class, "description"); System.out.println(xStream.toXML(list));
}
显示的数据格式:
<china>
<province name="北京">
<city name="朝阳区"/>
<city name="东城区"/>
</province>
<province name="河南">
<city name="郑州"/>
<city name="洛阳"/>
</province>
</china>
最后我们将xml数据的格式精简到这么少,可读性大大提高
XStream使用笔记的更多相关文章
- XStream学习笔记
XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...
- JavaBean与XML转换——XStream使用笔记
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6648131.html 一:View层与Control层的数据交互 做过Web项目的人都知道,当对一个requ ...
- Javaweb学习笔记——(二十三)——————AJAX、XStream、JSON
AJAX概述 1.什么是AJAX ajax(Asynchronous JavaScript and xml) 翻译成中文就是"异步JavaScript和xml&quo ...
- XStream xml 解析框架使用笔记
1. xml的标签可以映射为类.类成员变量 2. 有子标签的标签映射为类,没有子标签的便签映射为类成员变量 3. 类名.类成员变量名如与标签名不一致需要通过注解或代码设置别名 // 类名 @XStre ...
- XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...
- 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html
概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...
- XStream使用详解
1.Xstream介绍 (1)Xstream介绍 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...
- Jenkins的一些笔记
公司主要要开发自己的paas平台,集成了Jenkins,真的是遇到了很多很多困难,特别是在api调用的权限这一块,这里,把自己遇到的一些坑的解决方法做一下笔记吧.当然,首先要讲的,就是如何在开启安全的 ...
- 《Apache kafka实战》读书笔记-kafka集群监控工具
<Apache kafka实战>读书笔记-kafka集群监控工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如官网所述,Kafka使用基于yammer metric ...
随机推荐
- New Concept English three(19)
27w/m 76words Kidnappers are rarely interested in Animals, but they recently took considerable inter ...
- Cannot mix incompatible Qt library (version 0x40805) with this library (version 0x40801)
问题描述 今天运行我的 linux 上的 go 语言 IDE liteide 突然报错,错误如下: Cannot mix incompatible Qt library (version 0x4080 ...
- Ext JS 5 关于Store load返回json错误信息或异常的处理
关于在store load的时候服务器返回错误信息或服务器出错的处理.ExtJS4应该也能用,没测试过. 这里有两种情况: 服务器返回错误json错误信息,状态为200 服务器异常,状态为500 一. ...
- python pass关键字神奇吗
参考文献:http://blog.sina.com.cn/s/blog_76e94d210100vz3e.html 1.空语句 do nothing2.保证格式完整3.保证语义完整 好吧!它什么也没干 ...
- Adobe Acrobat 9 Pro破解方法
首先安装Adobe Acrobat 9 Pro,默认安装在C盘. 如果你的系统盘是C盘,那么就删除:c:/Documents and Settings/All Users/Application Da ...
- 服务器上通过FTP共享文件夹
近日,公司某服务器共同操作的人员增多,而我只需访问及替换某些文件,故想到共享文件夹. 在IIS中建立ftp站点,添加虚拟目录(可多个,对应不同文件夹),设置允许访问的用户(添加用户,见在IIS上搭建F ...
- wordpress插件汉化包,和使用教程
点击下载汉化包 解压后上传到该插件的 languages 目录即可
- springboot注册bean失败
启动的主类应该放在和其他包一样的目录,不能放在一个目录里面
- ecmall挂件开发实例二(转)
下述例子讲述了快速增加挂件的方法,但对系统中的代码未做更改,基本参照image_ad挂件的方法. 第 一步: 了解首页模板结构 首页文 件结构 include hearder.html 包含的头文件, ...
- Java NIO简单介绍(一)
Java NIO( New IO) 是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API. NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NI ...