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. PHP中MySQL、MySQLi和PDO的用法和区别【原创】

    对于一个初学PHP的自己,对数据库的连接有着很大的疑惑,从Java转到PHP.数据库连接变了,以前只知道JDBC连接数据库,或者直接用框架调用,对于的PHP的数据库连接方式,及其应用.不是很了解,于是 ...

  2. vs2008配置winddk

    Vs2008配置winddk 1.  安装winddk,我安装在了c盘下:   2. 电脑->属性->环境配置里 系统变量里加入 DDKBASE,其值是   3. path变量里增加 ;C ...

  3. Android程序员学WEB前端(8)-CSS(3)-盒子内联块级定位浮动-Sublime

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/76618473 觉得博文有用,请点赞,请评论,请关注,谢谢!~ 盒子模型: <!D ...

  4. [置顶] kubernetes1.8发布跟踪

    一.Kubernetes发布历史回顾 1.        Kubernetes 1.0 - 2015年7月发布 2.        Kubernetes 1.1 - 2015年11月发布 3.     ...

  5. Windows下使用CMake进阶

    目录 回顾代码工程中有什么 将需要的东西在cmake脚本CMakeLists.txt中申明 一键型编译 使用nmake 使用msbuild 实现一键编译 参考 在CMake入门实践一文中,我们初略的介 ...

  6. Mininet python代码创建拓扑、交互式界面创建主机、交换机

          python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...

  7. 我个人所有的独立博客wordpress都被挂马

    晕,所有的独立博客都中了这个,难怪访问有点慢,今天使用谷歌浏览器 来自知名恶意软件散布者 ***.net 的内容已经插入此网页.现在访问此网页很可能会导致您的计算机受到恶意软件入侵. 恶意软件是一种不 ...

  8. python中读取文件的f.seek()方法

    用于二进制文件中F.seek方法 作用: 设置读写位置 F.seek(偏移量, whence=相对位置) 偏移量 大于0的数代表向文件末尾方向移动的字节数 小于0的数代表向文件头方向中移动的字节数 相 ...

  9. java project 项目在 linux 下面部署方法

    1.前提是安装好了响应的开发和部署环境,例如jdk. 2.在Linux下运行可执行Jar包,首先准备jar包,一般的编译工具Eclipse,jbuilder都提供export功能,可以生成jar包. ...

  10. BZOJ2330 SCOI2011 糖果 【差分约束】

    BZOJ2330 SCOI2011 糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一 ...