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使用笔记的更多相关文章

  1. XStream学习笔记

    XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...

  2. JavaBean与XML转换——XStream使用笔记

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6648131.html  一:View层与Control层的数据交互 做过Web项目的人都知道,当对一个requ ...

  3. Javaweb学习笔记——(二十三)——————AJAX、XStream、JSON

    AJAX概述     1.什么是AJAX         ajax(Asynchronous JavaScript and xml) 翻译成中文就是"异步JavaScript和xml&quo ...

  4. XStream xml 解析框架使用笔记

    1. xml的标签可以映射为类.类成员变量 2. 有子标签的标签映射为类,没有子标签的便签映射为类成员变量 3. 类名.类成员变量名如与标签名不一致需要通过注解或代码设置别名 // 类名 @XStre ...

  5. XStream简单入门

    简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...

  6. 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html

    概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...

  7. XStream使用详解

    1.Xstream介绍 (1)Xstream介绍     Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...

  8. Jenkins的一些笔记

    公司主要要开发自己的paas平台,集成了Jenkins,真的是遇到了很多很多困难,特别是在api调用的权限这一块,这里,把自己遇到的一些坑的解决方法做一下笔记吧.当然,首先要讲的,就是如何在开启安全的 ...

  9. 《Apache kafka实战》读书笔记-kafka集群监控工具

    <Apache kafka实战>读书笔记-kafka集群监控工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如官网所述,Kafka使用基于yammer metric ...

随机推荐

  1. New Concept English three(19)

    27w/m 76words Kidnappers are rarely interested in Animals, but they recently took considerable inter ...

  2. Cannot mix incompatible Qt library (version 0x40805) with this library (version 0x40801)

    问题描述 今天运行我的 linux 上的 go 语言 IDE liteide 突然报错,错误如下: Cannot mix incompatible Qt library (version 0x4080 ...

  3. Ext JS 5 关于Store load返回json错误信息或异常的处理

    关于在store load的时候服务器返回错误信息或服务器出错的处理.ExtJS4应该也能用,没测试过. 这里有两种情况: 服务器返回错误json错误信息,状态为200 服务器异常,状态为500 一. ...

  4. python pass关键字神奇吗

    参考文献:http://blog.sina.com.cn/s/blog_76e94d210100vz3e.html 1.空语句 do nothing2.保证格式完整3.保证语义完整 好吧!它什么也没干 ...

  5. Adobe Acrobat 9 Pro破解方法

    首先安装Adobe Acrobat 9 Pro,默认安装在C盘. 如果你的系统盘是C盘,那么就删除:c:/Documents and Settings/All Users/Application Da ...

  6. 服务器上通过FTP共享文件夹

    近日,公司某服务器共同操作的人员增多,而我只需访问及替换某些文件,故想到共享文件夹. 在IIS中建立ftp站点,添加虚拟目录(可多个,对应不同文件夹),设置允许访问的用户(添加用户,见在IIS上搭建F ...

  7. wordpress插件汉化包,和使用教程

    点击下载汉化包 解压后上传到该插件的 languages 目录即可

  8. springboot注册bean失败

    启动的主类应该放在和其他包一样的目录,不能放在一个目录里面

  9. ecmall挂件开发实例二(转)

    下述例子讲述了快速增加挂件的方法,但对系统中的代码未做更改,基本参照image_ad挂件的方法. 第 一步: 了解首页模板结构 首页文 件结构 include hearder.html 包含的头文件, ...

  10. Java NIO简单介绍(一)

    Java NIO( New IO) 是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API. NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NI ...