XStream
1.什么作用
*可以把Javabean转换成(序列化为)XML
2.XStream的jar包
* 核心JAR包:xstream-1.4.7.jar
* 必须依赖的包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器)
3.使用步骤
* XStream xstream = new XStream();
* String xmlStr = xstream.toXML(javabean);
4.使用细节
* 别名:把类型对应的元素名修改了
> xstream.alias("china", List.class):让List类型生成的元素名为china
* 使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
> xstream.useAttributeFor(Province.class, "name"):把Province类的名为name成员,生成<province>元素的name属性
* 去除Collection类型的成员:我们只需要Collection的内容,而不希望Collection本身也生成一个元素
> xstream.addImplicitCollection(Province.class, "cities"):让Province类的名为cities(它是List类型的,它的内容还会生成元素)的成员不生成元素
* 去除类的指定成员,让其不生成xml元素
> xstream.omitField(City.class, "description"):在生成的xml中不会出现City类的,名为description的对应的元素!
代码示例:
Province:
package com.xjs.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; } public void addCity(City city) { cities.add(city); } }
City:
package com.xjs.demo1; public class City { private String name;// 市名 private String description;// 描述 public City() { } public City(String name, String description) { super(); this.name = name; this.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; } @Override public String toString() { return "City [name=" + name + ", description=" + description + "]"; } }
Demo1:
package com.xjs.demo1; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.thoughtworks.xstream.XStream; /** * 演示 * @author hp * */ public class Demo1 { //返回JavaBean集合 public List<Province> getProvinceList(){ Province p1=new Province(); p1.setName("北京"); p1.addCity(new City("东城区","DongChengQu")); p1.addCity(new City("昌平区","ChangPingQu")); Province p2=new Province(); p2.setName("辽宁"); p2.addCity(new City("沈阳","shenYang")); p2.addCity(new City("葫芦岛","HuLuDao")); List<Province> provinceList=new ArrayList<Province>(); provinceList.add(p1); provinceList.add(p2); return provinceList; } @Test public void fun1(){ List<Province> proList=getProvinceList(); /* * 创建XStream对象 * 调用toXML把集合转换成xml字符串 */ XStream xs=new XStream(); String xml = xs.toXML(proList); System.out.println(xml); } /* * 别名 * 希望: * >默认List类型对应<List>元素,希望让List类型对应<china>元素 * >默认Province类型对应<com.xjs.demo1.Province>,希望它对应<province> * >默认City类型对应<com.xjs.demo1.City>,希望对应<city> */ @Test public void fun2(){ List<Province> proList=getProvinceList(); XStream xs=new XStream(); /* * 给指定的类型指定别名 */ xs.alias("china", List.class);// xs.alias("province", Province.class); xs.alias("city", City.class); String xml = xs.toXML(proList); System.out.println(xml); } /* * 默认JavaBean的属性都会生成子元素,而现在希望生成元素的属性 */ @Test public void fun3(){ List<Province> proList=getProvinceList(); XStream xs=new XStream(); xs.alias("china", List.class);//List类型指定别名为china xs.alias("province", Province.class); xs.alias("city", City.class); /* * 把Province类型的name属性,生成<province>元素的属性 */ xs.useAttributeFor(Province.class, "name"); String xml = xs.toXML(proList); System.out.println(xml); } /* * 去除List类型的属性,只把List中的元素生成XML */ @Test public void fun4(){ List<Province> proList=getProvinceList(); XStream xs=new XStream(); xs.alias("china", List.class);//List类型指定别名为china xs.alias("province", Province.class); xs.alias("city", City.class); /* * 把Province类型的name属性,生成<province>元素的属性 */ xs.useAttributeFor(Province.class, "name"); /* * 去除<cities>这样Collection类型的属性 * 去除Province类的名为cities的List类型的属性 */ xs.addImplicitCollection(Province.class, "cities"); String xml = xs.toXML(proList); System.out.println(xml); } /* * 去除某个JavaBean中的属性 */ @Test public void fun5(){ List<Province> proList=getProvinceList(); XStream xs=new XStream(); xs.alias("china", List.class);//List类型指定别名为china xs.alias("province", Province.class); xs.alias("city", City.class); xs.useAttributeFor(Province.class, "name"); xs.addImplicitCollection(Province.class, "cities"); /* * 让City类的description属性不生成对应 的xml元素 */ xs.omitField(City.class, "description"); String xml = xs.toXML(proList); System.out.println(xml); } }