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 ...
随机推荐
- L156
China has specified the definition and diagnosis standard for internet addiction in its latest adole ...
- java事务(三)
java事务(三)——自己实现分布式事务 在上一篇<java事务(二)——本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在J ...
- Unity3D查找丢失材质和脚本工具
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- pip安装tensorflow出错怎么办
随着人工智能的开发越来越多人参与,现在下载tensorflow 1.2版本也经常出错了,如下: 这时怎么办呢? 其实比较简单,可以通过pypi的网站来下载: https://pypi.python.o ...
- spring boot入门教程——Spring Boot快速入门指南
Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...
- P4语言编程详解
1.源码目录结构 P4项目源码可以在github上直接获取(https://github.com/p4lang).P4项目由很多个单独的模块组成,每个模块就是一个子项目,下面分别简单介绍一下各模块的功 ...
- linux 文件上传&软件安装(rpm)
文件的上传与下载(linux -linux ) 实例1:从远处复制文件到本地目录命令:scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /o ...
- JAVA多线程----用--死锁
(1) 互斥条件:一个资源每次只能被一个进程使用.(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放.(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺.(4) ...
- Intro to DBSCAN
DBSCAN Density-Based Spatial Clustering of Application with Noise It can discover cluster of arbitra ...
- Android:BroadcastReceiver
参考:<第一行代码:Android> 郭霖(著) Broadcast分类 注册方式: 动态广播 在代码中注册receiver 一定要手动在onDestroy()时调用unregiste ...