一:功能
可以将JavaBean转换(序列化)成XMl
二:依赖jar包
xstream.jar
xpp3_min.jar(xml pull parser)xml解析器
三:使用步骤
XStream xstream = new XStream();
String xmlStream = xstream.toXML(JavaBean);
四:使用细节
别名:把对应的元素名改了,因为生成的元素名会包含整个JavaBean的全路径
// 指定别名 xStream.alias("china",List.class); xStream.alias("province",Province.class); xStream.alias("city",City.class);
使用为属性,默认类的成员,生成的是子元素,我们希望将它改为属性,如name
// 把Province类型的name属性,生成元素的属性 xStream.useAttributeFor(Province.class,"name");
去除collection类型的成员名,只是需要collection的内容,不希望collection本身再生成一个子节点去包含它的内容
xStream.addImplicitCollection(Province.class,"citys");
去除类的指定的成员名,JavaBean可能包含我们不需要在XML中使用的属性,所以需要去除多有的成员
xStream.omitField(City.class,"description");
五:源码
JavaBean
package xstream;/** * Created by YuWenHui on 2017/4/24 0024. */public class City { private String name; private String description; public City(String name, String description) { this.name = name; this.description = description; } public City() { super(); } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
package xstream;import java.util.ArrayList;import java.util.List;/** * Created by YuWenHui on 2017/4/24 0024. */public class Province { private String name; Listcitys = new ArrayList (); public String getName() { return name; } public void setName(String name) { this.name = name; } public List getCitys() { return citys; } public void setCitys(List citys) { this.citys = citys; } public void addCity(City city){ citys.add(city); }}
dome
package xstream;import com.thoughtworks.xstream.XStream;import java.util.ArrayList;import java.util.List;/** * Created by YuWenHui on 2017/4/24 0024. */public class Dome { // 返回javabean集合 public ListgetProinvceList() { 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("上饶", "ShangRao")); p2.addCity(new City("宜春", "YiChun")); List provinceList = new ArrayList (); provinceList.add(p1); provinceList.add(p2); return provinceList; } @org.junit.Test public void test(){ List provinceList = getProinvceList(); XStream xStream = new XStream();// 指定别名 xStream.alias("china",List.class); xStream.alias("province",Province.class); xStream.alias("city",City.class);// 把Province类型的name属性,生成 元素的属性 xStream.useAttributeFor(Province.class,"name");// 去除collection类型的成员名,只是需要collection的内容,不希望collection本身再生成一个子节点去包含它的内容 xStream.addImplicitCollection(Province.class,"citys");// 去除类的指定的成员名,JavaBean可能包含我们不需要在XML中使用的属性,所以需要去除多有的成员 xStream.omitField(City.class,"description"); String s = xStream.toXML(provinceList); System.out.println(s); }}
六:结果
<china>
<province name="北京"> <city> <name>东城区</name> </city> <city> <name>昌平区</name> </city> </province> <province name="江西"> <city> <name>上饶</name> </city> <city> <name>宜春</name> </city> </province></china>