1. XStream 作用
- 可以把 JavaBean 转换为(序列化) xml;
2. XStream 相关 jar 包
- 核心 jar 包:
xstream-1.4.7
; - 必须依赖包:
xpp3_min-1.1.4c
(XML Pull Parser, 一款速度很快的 XML 解析器);
3. 使用步骤:
XStream xstream = new XStream();
String xmlStr = xstream.toXML(javaBean);
// City.java
public class City{
private String name;
private String description;
...
}
// Province.java
public class Province {
private String name;
private List<City> cities = new ArrayList<City>();
public addCity(City city){
cities.add(city);
}
}
// XStream 使用
public class Demo{
public List<Province> getProvince(){
Province p1 = new Province("辽宁省");
p1.addCity(new City("沈阳","shenyang"));
p1.addCity(new City("大连","dalian"));
Province p2 = new Province("吉林省");
p2.addCity(new City("长春","changchun"));
p2.addCity(new City("四平","siping"));
List<Province> provinceList = new ArrayList<Province>();
provinceList.add(p1);
provinceList.add(p2);
return provinceList;
}
public void fun(){
List<Province> proList = getProvince();
XStream xstream = new XStream();
String s = xstream.toXML(proList);
}
}
// 输出结果
<list>
<cn.itcast.xstream.Province>
<name>辽宁省</name>
<cities>
<cn.itcast.xstream.City>
<name>沈阳</name>
<description>shenyang</description>
</cn.itcast.xstream.City>
<cn.itcast.xstream.City>
<name>大连</name>
<description>dalian</description>
</cn.itcast.xstream.City>
</cities>
</cn.itcast.xstream.Province>
<cn.itcast.xstream.Province>
<name>吉林省</name>
<cities>
<cn.itcast.xstream.City>
<name>长春</name>
<description>changchun</description>
</cn.itcast.xstream.City>
<cn.itcast.xstream.City>
<name>四平</name>
<description>siping</description>
</cn.itcast.xstream.City>
</cities>
</cn.itcast.xstream.Province>
</list>
// 更改别名
/*
* 默认 List 类型对应 <list> 元素, 希望让 List 类型对应 <china>
* 默认 province 类型对应 <cn.itcast.xstream.Province>, 希望让它对应 <province>
* 默认 City 类型对应 <cn.itcast.xstream.City>, 希望让它对应 <city> 元素
*
* 默认 JavaBean 的属性都会生成子元素! 希望让类的成员生成元素的属性
*
* 去除集合(Collection)类型的成员, 只保留 Collection 的内容
*/
public void fun2(){
List<Province> proList = getProvince();
XStream xstream = new XStream();
// 给指定的类型指定别名
// 让 List 类型生成的元素名为 china
xstream.alias("china",List.class);
// 让 Province 类型生成的元素名为 province
xstream.alias("province",Province.class);
// 让 City 类型生成的元素名为 city
xstream.alias("city",City.class);
// 把 Province 类型的 name 属性, 生成 <province> 元素的属性
xstream.useAttributeFor(Province.class,"name");
// 让 Province 类的名为 cities 的成员不生成元素
// cities 是 List 类型, 也会生成元素
xstream.addImplicitCollection(Province.class,"cities");
// 让 city 类中名为 description 属性不生成对应的 xml 元素
xstream.omitField(City.class,"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>
参考资料: