您的位置:首页 > 编程语言 > Java开发

Xstream使用的相关细节(javaBean转换成xml文档)

2017-08-14 13:29 471 查看

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>


大功告成!!!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: