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>