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. IE中在a标签里的图片会显示边框

    例如: <a><img src="/UI/Images/ss.jpg"></a>,图的边框会出现a标签默认的边框, 解决办法: img{bord ...

  2. c# DataTable行转列

    /// <summary> /// datatable行转列 /// </summary> /// <param name="dtSrc">来源 ...

  3. Windows 64位系统下安装JAVA环境

    文件名称:jdk-7u51-windows-x64 下载Windows 64位平台的JDK安装文件. 安装 1.双击打开下载好的文件,点击“下一步”开始安装. 2. ①默认选择安装全部功能,不做调整. ...

  4. GNU Autotools的使用方法

    手工写Makefile是一件很有趣的事情,对于比较大型的项目,如果有工具可以代劳,自然是一件好事.在Linux系统开发环境中,GNU Autotools 无疑就充当了这个重要角色.(在Windows系 ...

  5. easyUI---分页插件

    设置 //分页组件 $('#detailLayer .detailPag').pagination({ pageNumber: 1, pageSize: 10, total: result.Total ...

  6. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

  7. IOS开发 __weak与__block修饰符到底有什么区别

    API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables ...

  8. PyQt: “AttributeError: 'Form' object has no attribute 'exec_'” when opening second window

    # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication , QMainWindow from PyQt5 ...

  9. JavaScript:逻辑操作符“==”与“===”的区别

    Summary JavaScript中,逻辑操作符“===”会先检查操作数的数据类型,对不同的数据类型会返回false. 而“==”对不同类型的操作数进行比较时,会进行类型转换后再比较. Descri ...

  10. Jmeter-BeanShell Sampler调用java代码

    1.添加BeanShell Sampler 2.编写BeanShell Sampler代码 3.引用参数 ${id}