XML:XStream

1 XStream的作用

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

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

2 XStream入门

为了演示XStream的作用,我们需要先写两个类,Province和City。

City.java

publicclass City {

private String name;

private String description;

……

}

Province.java

publicclass Province {

private String name;

private List<City> cities = new ArrayList<City>();

publicvoid addCity(City city) {

cities.add(city);

}

……

}

接下来,我们需要写一个main(),创建一个List,List中存放两个Province对象!最终我们把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);

2.1 XStream相关jar包

我们可以到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>

  也就是说,XStream是根据对象名、类名、属性名来生成XML文档的!

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>

2.4 把子元素变为元素属性

例如我们需要把<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>

2.5 去除集合属性对应元素

大家可能已经发现了,因为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>

2.6 让类的成员不生成对应XML元素

到现在为止,我们都是每个类,每个成员都有对应的元素(或属性)存在,但有时我们并不希望某些类的成员在对应的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>


[c1]与对象名对应!

[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

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念