XStream的作用

XStream可以把JavaBean对象转换成XML!

通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给客户端,所以我们需要把对象转换成XML再响应给客户端,这时就需要使用XStream组合了

XStream相关JAR包

我们可以到http://xstream.codehaus.org/地址去下载XStream安装包!

XStream的必导JAR包:

核心JAR包:xstream-1.4.7.jar;

必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器)

XStream举例

首先创建两个JavaBean对象

City类----------------------------
public class City { private String name;
private String description; public City(String name,String description) {
this.name=name;
this.description=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;
}
@Override
public String toString() {
return "City [name=" + name + ", description=" + description + "]";
} }
Province类--------------------------
public class Province { private String name;
private List<City> cities = new ArrayList<City>(); public Province(String name) {
this.name=name;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<City> getCities() {
return cities;
} public void addCity(City name) {
cities.add(name);
}
@Override
public String toString() {
return "Province [name=" + name + ", cities=" + cities + "]";
} }

接下来,我们需要写一个main(),创建一个List,List中存放两个Province对象!最终我们把List转换成XML

下面是使用XStream转换list为XML的代码

        Province p1 = new Province("辽宁省");
p1.addCity(new City("沈阳", "shenyang"));
p1.addCity(new City("大连", "dalian")); Province p2 = new Province("吉林省");
p2.addCity(new City("长春", "changchen"));
p2.addCity(new City("白城", "baicheng")); List<Province> list = new ArrayList<Province>(); list.add(p1);
list.add(p2);
//--------------------------------------------------------

       XStream xstream = new XStream();

        String s = xstream.toXML(list);
        System.out.println(s);

下面是运行结果

<list>
<cn.itcast.xstream.demo1.Province>
<name>辽宁省</name>
<cities>
<cn.itcast.xstream.demo1.City>
<name>沈阳</name>
<description>shenyang</description>
</cn.itcast.xstream.demo1.City>
<cn.itcast.xstream.demo1.City>
<name>大连</name>
<description>dalian</description>
</cn.itcast.xstream.demo1.City>
</cities>
</cn.itcast.xstream.demo1.Province>
<cn.itcast.xstream.demo1.Province>
<name>吉林省</name>
<cities>
<cn.itcast.xstream.demo1.City>
<name>长春</name>
<description>changchen</description>
</cn.itcast.xstream.demo1.City>
<cn.itcast.xstream.demo1.City>
<name>白城</name>
<description>baicheng</description>
</cn.itcast.xstream.demo1.City>
</cities>
</cn.itcast.xstream.demo1.Province>
</list>

使用alias,在生成的XML中,与类名对应的元素名称包含了包名部分,这很不好看!若想自定义生成的元素名称,需要使用XStream为类名提供别名:

xstream.alias("province", Province.class);
xstream.alias("china", List.class);
xstream.alias("city", City.class);
---------------------------------------------------------------------------------------
结果为:
<china>
<province>
<name>辽宁省</name>
<cities>
<city>
<name>沈阳</name>
<description>shenyang</description>
</city>
<city>
<name>大连</name>
<description>dalian</description>
</city>
</cities>
</province>
<province>
<name>吉林省</name>
<cities>
<city>
<name>长春</name>
<description>changchen</description>
</city>
<city>
<name>白城</name>
<description>baicheng</description>
</city>
</cities>
</province>
</china>

把子元素变为元素属性,例如我们需要把<province>的子元素<name>变成:<province name=””>样式,那么需要调用如下方法

xstream.useAttributeFor(Province.class, "name");
--------------------------------------------------------------
结果为
<china>
<province name="辽宁省">
<cities>
<city>
<name>沈阳</name>
<description>shenyang</description>
</city>
<city>
<name>大连</name>
<description>dalian</description>
</city>
</cities>
</province>
<province name="吉林省">
<cities>
<city>
<name>长春</name>
<description>changchen</description>
</city>
<city>
<name>白城</name>
<description>baicheng</description>
</city>
</cities>
</province>
</china>
去除集合属性对应元素

因为Pronvice类有一个cities成员,所以生成了<cities>元素,但这个元素对XML文档而言没有什么意义,所以我们希望把它去除!

xstream.addImplicitCollection(Province.class, "cities");
--------------------------------------------------------------------------
结果为
<china>
<province name="辽宁省">
<city>
<name>沈阳</name>
<description>shenyang</description>
</city>
<city>
<name>大连</name>
<description>dalian</description>
</city>
</province>
<province name="吉林省">
<city>
<name>长春</name>
<description>changchen</description>
</city>
<city>
<name>白城</name>
<description>baicheng</description>
</city>
</province>
</china>
让类的成员不生成对应XML元素

每个类,每个成员都有对应的元素(或属性)存在,但有时我们并不希望某些类的成员在对应的XML文档中出现,例如我们不希望City类的description成员出现在XML文档中,可以使用下面方法

xstream.omitField(City.class, "description"); //不希望description属性出现
----------------------------------------------------------
结果为
<china>
<province name="辽宁省">
<city>
<name>沈阳</name>
</city>
<city>
<name>大连</name>
</city>
</province>
<province name="吉林省">
<city>
<name>长春</name>
</city>
<city>
<name>白城</name>
</city>
</province>
</china>

最新文章

  1. WebApi安全性 使用TOKEN+签名验证
  2. 用Python制作新浪微博爬虫
  3. MATLAB处理信号得到频谱、相谱、功率谱
  4. 13-mv 命令总结
  5. MVC - 11(下)jquery.tmpl.js +ajax分页
  6. SublimeText为啥选择Python开发extension
  7. struts2框架——从后台取得数据集,并在前台页面循环显示
  8. 利用DIV+CSS制作网页过程中常用的基本概念及标签使
  9. Provider 错误 &#39;80004005&#39; 未指定的错误 的最终解决方法
  10. 《鸟哥的Linux私房菜》读书笔记一
  11. POJ1125 Stockbroker Grapevine(最短路)
  12. /usr/lib64/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
  13. windows10企业版怎么关闭自动更新
  14. 2星|《重新定义物流》:形式像PPT,内容像公关稿
  15. iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上
  16. mac上配置java开发环境
  17. saltstack-----master迁移篇
  18. PNG格式图片常见转换方法
  19. Kafka日志存储原理
  20. nGrinder对监控机器收集自定义数据及源码分析

热门文章

  1. 大数据学习(1)-shell脚本注意事项
  2. 稀疏矩阵三元组快速转置(转poklau123写的很清楚)
  3. sql server len函数
  4. C# 下sqlite简单使用
  5. 架构师成长之路5.5-Saltstack配置管理(状态间关系)
  6. Kay and Snowflake CodeForces - 686D (树的重心性质)
  7. vim快速到行尾
  8. UVA - 1649 Binomial coefficients (组合数+二分)
  9. hdu4507 吉哥系列故事——恨7不成妻[数位DP]
  10. k8sDaemonSet控制器