XML:XStream
2015-11-24 11:44
281 查看
1 XStream的作用
XStream可以把JavaBean对象转换成XML!通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给响应端,所以我们需要把对象转换成XML再响应给客户端,这时就需要使用XStream组合了。
2 XStream入门
为了演示XStream的作用,我们需要先写两个类,Province和City。City.java
publicclass City { private String name; private String description; …… } |
publicclass Province { private String name; private List<City> cities = new ArrayList<City>(); publicvoid addCity(City city) { cities.add(city); } …… } |
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); |
我们可以到http://xstream.codehaus.org/地址去下载XStream安装包!
XStream的必导JAR包:
l 核心JAR包:xstream-1.4.7.jar;
l 必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);
2.2 使用XStream把Java对象转换成XML
下面是使用XStream转换list为XML的代码:
XStream xstream = new XStream(); String s = xstream.toXML(list); System.out.println(s); |
<list[c1] > <cn.itcast.xstream.demo1.Province[c2] > <name[c3] >辽宁省</name> <cities[c4] > <cn.itcast.xstream.demo1.City[c5] > <name[c6] >沈阳</name> <description[c7] >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> |
2.3 alias用法
大家也看到了,生成的XML中,与类名对应的元素名称包含了包名部分,这很不好看!若想自定义生成的元素名称,需要使用XStream为类名提供别名:
xstream.alias("province", Province.class);[c8] xstream.alias("china", List.class); [c9] xstream.alias("city", City.class);[c10] |
<china>[c11] <province>[c12] <name>辽宁省</name> <cities> <city>[c13] <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");[c14] |
<china> <province name="辽宁省">[c15] <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");[c16] |
<china> <province name="辽宁省">[c17] <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文档中出现,例如我们不希望City类的description成员出现在XML文档中,可以使用下面方法:
xstream.omitField(City.class, "description");[c18] |
<china> <province name="辽宁省"> <city> <name>沈阳</name> </city> <city> <name>大连</name> </city> </province> <province name="吉林省"> <city> <name>长春</name> </city> <city> <name>白城</name> </city> </province> </china> |
[c2]与Province类名对应
[c3]与Province类的name属性对应
[c4]与Province类的cities属性对应
[c5]与City类名对应
[c6]与City类的name属性对应
[c7]与City类的description属性对应
[c8]把Province类对应的元素名命名为province
[c9]把list对象对应的元素名称命名为china
[c10]把City类对象的元素名称命名为city
[c11]原来是list,对应list对象名称,现在已经为china
[c12]原来是类的全名
[c13]原来是类的全名
[c14]让Province类的name成员以属性形式出现!
[c15]Province类的name成员以元素的属性形式出现。
[c16]隐藏Province类的名为cities的集合元素
[c17]province元素下再没有ciites元素,而是由province元素直接包含city元素
[c18]在生成的XML文档中省略City类的description
相关文章推荐
- C# XML,XmlDocument简单操作实例
- Maven+Spring+Dubbo学习笔记
- ArcGIS教程:成本距离工具工作原理(一)
- 数据库连不上?
- OpenCV绘制箭头
- android开发者的42个必读网站
- 微信公众平台上传图片,自动回复图片
- oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)
- jQuery源码学习7——实例成员
- Android 利用剪切板(clipboardManager )实现数据传递
- 【leetcode】【48】Rotate Image
- 开发:点击空白处收起虚拟键盘的方案和原理(触发分发流程)
- Fragment完全解析(下)
- Android seekbar样式介绍
- [LeetCode249]Group Shifted Strings
- 安装sql2000时提示:“写时无法打开指定的文件。请确保该文件没有使用,然后重新启动安装程序”
- piwik流量统计系统搭建(apache2.4+piwik+mysql5.6+php5.6.14)
- 抽象工厂模式 具体工厂接口 具体工厂
- 如何解决ligerUI布局时Center中的Tab高度大小
- Runtime 控制UIButton的暴力点击