1. 导入jar包
jar包:xstream-1.4.7.jar与依赖包xpp3_min-1.1.4c.jar.。
2. 创建javaBean(示例)
//城市类
package cn.yellowimg.demo1;
public class City {
private String name;//市名
private String description;
@Override
public String toString() {
return "City [name=" + name + ", 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;
}
public City() {
super();
// TODO Auto-generated constructor stub
}
public City(String name, String description) {
super();
this.name = name;
this.description = description;
}
}
//省类
package cn.yellowimg.demo1;
import java.util.ArrayList;
import java.util.List;
public class Province {
private String name;
private List<City> cities = new ArrayList<City>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<City> getCities() {
return cities;
}
public void setCities(List<City> cities) {
this.cities = cities;
}
//创建该方法的原因是方便往cities添加City对象
public void addCity(City city)
{
cities.add(city);
}
}
3.创建一个国家集合(List<Province>
)
public class Demo1 {
public List<Province> getProvinceList()
{
List<Province> provinceList = new ArrayList<Province>();
Province p1 = new Province();
p1.setName("北京");
p1.addCity(new City("海淀区","haidian"));
p1.addCity(new City("朝阳区","chaoyang"));
provinceList.add(p1);
return provinceList;
}
4. 测试类
@Test
public void fun1()
{
List<Province> provinceList = getProvinceList();
/**
* 创建Xstream对象
* 调用toXMl把集合转换成xml字符串
*/
XStream xStream = new XStream();
String xml = xStream.toXML(provinceList);
System.out.println(xml);
}
5.运行结果
<list>------->对应provinceList对象
<cn.yellowimg.demo1.Province>------->对应Province对象
<name>北京</name>------->对应Province对象的属性name
<cities>------->对应Province对象的属性cities
<cn.yellowimg.demo1.City>------->对应City对象
<name>海淀区</name>------->对应City对象的属性name
<description>haidian</description>------->对应City对象的属性description
</cn.yellowimg.demo1.City>
<cn.yellowimg.demo1.City>
<name>朝阳区</name>
<description>chaoyang</description>
</cn.yellowimg.demo1.City>
</cities>
</cn.yellowimg.demo1.Province>
</list>
6.改进需求
- 将list改为china
- cn.yellowimg.demo1.Province修改为province
- cn.yellowimg.demo1.City修改为city。
@Test
public void fun2()
{
List<Province> provinceList = getProvinceList();
/**
* 创建Xstream对象
* 调用toXMl把集合转换成xml字符串
*/
XStream xStream = new XStream();
/**
* xStream.alias(String name,Class type)为一个对象类型起别名
* name为修改之后的别名,type为对象类型
*/
xStream.alias("china",List.class);
xStream.alias("province",Province.class);
xStream.alias("city",City.class);
String xml = xStream.toXML(provinceList);
System.out.println(xml);
}
结果:
<china>
<province>
<name>北京</name>
<cities>
<city>
<name>海淀区</name>
<description>haidian</description>
</city>
<city>
<name>朝阳区</name>
<description>chaoyang</description>
</city>
</cities>
</province>
</china>
- 将province下的name元素变为province的属性
@Test
public void fun3()
{
List<Province> provinceList = getProvinceList();
/**
* 创建Xstream对象
* 调用toXMl把集合转换成xml字符串
*/
XStream xStream = new XStream();
/**
* xStream.alias(String name,Class type)为一个对象类型起别名
* name为修改之后的别名,type为对象类型
*/
xStream.alias("china",List.class);
xStream.alias("province",Province.class);
xStream.alias("city",City.class);
/**
* xStream.useAttributeFor(Class type,String field);
* useAttributeFor()的意思是将某个对象类型的字段变为属性
*/
xStream.useAttributeFor(Province.class,"name");
String xml = xStream.toXML(provinceList);
System.out.println(xml);
}
<china>
<province name="北京">
<cities>
<city>
<name>海淀区</name>
<description>haidian</description>
</city>
<city>
<name>朝阳区</name>
<description>chaoyang</description>
</city>
</cities>
</province>
</china>
- 去除无用的集合属性
<cities>
元素
@Test
public void fun4()
{
List<Province> provinceList = getProvinceList();
/**
* 创建Xstream对象
* 调用toXMl把集合转换成xml字符串
*/
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.addImplicitCollection(Class type,String field);
* 去除无用的集合属性,直接显示list类型里的元素。
* 我们需要Collection的内容,而不希望Collection本身也成为一个元素
/
xStream.addImplicitCollection(Province.class, "cities");
String xml = xStream.toXML(provinceList);
System.out.println(xml);
}
<china>
<province name="北京">
<city>
<name>海淀区</name>
<description>haidian</description>
</city>
<city>
<name>朝阳区</name>
<description>chaoyang</description>
</city>
</province>
</china>
- 删除
<description>
元素
@Test
public void fun5()
{
List<Province> provinceList = getProvinceList();
/**
* 创建Xstream对象
* 调用toXMl把集合转换成xml字符串
*/
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.addImplicitCollection(Province.class, "cities");
/**
* xStream.omitField(Class type, String field);
* 忽略对象中的某个属性。
*/
xStream.omitField(City.class, "description");
String xml = xStream.toXML(provinceList);
System.out.println(xml);
}
<china>
<province name="北京">
<city>
<name>海淀区</name>
</city>
<city>
<name>朝阳区</name>
</city>
</province>
</china>