1、XStream可以把JavaBean转化为(序列化为)xml
依赖jar包:核心jar包:xstream-1.4.7.jar;必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);xstream-benchmark-1.4.7.jar;xstream-hibernate-1.4.7.jar;
2、使用步骤
XStream xstream = new XStream();
String xmlStr = xstream.toXML(javabean);
示例:
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
public class Testpc {
public static void main(String[] args) {
List<Province> proList = getProvinceList() ;
XStream xstream = new XStream() ;
//String s = xstream.toXML(proList) ;
//System.out.println(s);
/*
<list>-->List类型显示list
<com.demo1.Province>-->javabean的类型为Province,它的元素名称为类的完整名
<name>北京</name>-->javabean的属性名
<cities>-->javabean的属性名
<com.demo1.City>
<name>东城区</name>
<des>dongchengqu</des>
</com.demo1.City>
<com.demo1.City>
<name>西城区</name>
<des>xichengqu</des>
</com.demo1.City>
</cities>
</com.demo1.Province>
<com.demo1.Province>
<name>陕西</name>
<cities>
<com.demo1.City>
<name>商洛</name>
<des>shangluo</des>
</com.demo1.City>
<com.demo1.City>
<name>西安</name>
<des>xian</des>
</com.demo1.City>
</cities>
</com.demo1.Province>
</list>
*/
//别名:<list>修改为<china>;<com.demo1.Province>修改为<province>一类
xstream.alias("china", List.class);
xstream.alias("province", Province.class);
xstream.alias("city", City.class);
//默认javabean的属性都会生成子元素,但可以指定javabean某属性为XML中元素的属性
xstream.useAttributeFor(Province.class,"name"); //把Province类中的name属性作为元素属性
//去除<cities>这样的Collection类型的属性
xstream.addImplicitCollection(Province.class, "cities");
//去除不想要的javabean属性
xstream.omitField(City.class,"des") ;
String s = xstream.toXML(proList) ;
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>
*/
}
public static List<Province> getProvinceList() {
Province p1 = new Province() ;
p1.setName("北京");
p1.addCity(new City("东城区","dongchengqu"));
p1.addCity(new City("西城区","xichengqu"));
Province p2 = new Province() ;
p2.setName("陕西");
p2.addCity(new City("商洛","shangluo"));
p2.addCity(new City("西安","xian"));
List<Province> provinceList = new ArrayList<Province>() ;
provinceList.add(p1) ;
provinceList.add(p2) ;
return provinceList;
}
}
City.java
public class City {
private String name ;
private String des ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
public City() {
super();
}
public City(String name, String des) {
super();
this.name = name;
this.des = des;
}
@Override
public String toString() {
return "City [name=" + name + ", des=" + des + "]";
}
}
Province.java
import java.util.ArrayList;
import java.util.List;
public class Province {
private String name ;
private List<City> cities = new ArrayList<City>() ;
public void addCity(City city) {
cities.add(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;
}
}