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.alias("province", Province.class):让Province类型生成的元素名为province
使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
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的对应的元素!
应用实例:
1 import java.util.ArrayList; 2 import java.util.List; 3 import org.junit.Test; 4 import com.thoughtworks.xstream.XStream; 5 /** 6 * 演示XStream 7 */ 8 public class Demo1 { 9 // 返回javabean集合 10 public List<Province> getProinvceList() { 11 Province p1 = new Province(); 12 p1.setName("北京"); 13 p1.addCity(new City("东城区", "DongChengQu")); 14 p1.addCity(new City("昌平区", "ChangPingQu")); 15 Province p2 = new Province(); 16 p2.setName("辽宁"); 17 p2.addCity(new City("沈阳", "shenYang")); 18 p2.addCity(new City("葫芦岛", "huLuDao")); 19 List<Province> provinceList = new ArrayList<Province>(); 20 provinceList.add(p1); 21 provinceList.add(p2); 22 return provinceList; 23 } 24 @Test 25 public void fun1() { 26 List<Province> proList = getProinvceList(); 27 /* 28 * 创建XStream对象 29 * 调用toXML把集合转换成xml字符串 30 */ 31 XStream xstream = new XStream(); 32 String s = xstream.toXML(proList); 33 System.out.println(s); 34 } 35 /* 36 * 别名(alias) 37 * 希望: 38 * * 默认List类型对应<list>元素,希望让List类型对应<china>元素 39 * * 默认Province类型对应<cn.itcast.demo1.Province>,希望让它对应<province> 40 * * 默认City类型对应<cn.itcast.demo1.City>,希望它对应<city>元素 41 */ 42 @Test 43 public void fun2() { 44 List<Province> proList = getProinvceList(); 45 XStream xstream = new XStream(); 46 /* 47 * 给指定的类型指定别名 48 */ 49 xstream.alias("china", List.class);//给List类型指定别名为china 50 xstream.alias("province", Province.class);//给Province指定别名为province 51 xstream.alias("city", City.class);//给City类型指定别名为city 52 String s = xstream.toXML(proList); 53 System.out.println(s); 54 } 55 /* 56 * 默认javabean的属性都会生成子元素,而现在希望生成元素的属性 57 */ 58 @Test 59 public void fun3() { 60 List<Province> proList = getProinvceList(); 61 XStream xstream = new XStream(); 62 xstream.alias("china", List.class);//给List类型指定别名为china 63 xstream.alias("province", Province.class);//给Province指定别名为province 64 xstream.alias("city", City.class);//给City类型指定别名为city 65 /* 66 * 把Province类型的name属性,生成<province>元素的属性 67 */ 68 xstream.useAttributeFor(Province.class, "name"); 69 String s = xstream.toXML(proList); 70 System.out.println(s); 71 } 72 /* 73 * 去除List类型的属性,只把list中的元素生成xml元素 74 */ 75 @Test 76 public void fun4() { 77 List<Province> proList = getProinvceList(); 78 XStream xstream = new XStream(); 79 xstream.alias("china", List.class);//给List类型指定别名为china 80 xstream.alias("province", Province.class);//给Province指定别名为province 81 xstream.alias("city", City.class);//给City类型指定别名为city 82 xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性 83 /* 84 * 去除<cities>这样的Collection类型的属性 85 * 去除Provice类的名为cities的List类型的属性! 86 */ 87 xstream.addImplicitCollection(Province.class, "cities"); 88 String s = xstream.toXML(proList); 89 System.out.println(s); 90 } 91 /* 92 * 去除不想要的javabean属性 93 * 就是让某引起javabean属性,不生成对应的xml元素! 94 */ 95 @Test 96 public void fun5() { 97 List<Province> proList = getProinvceList(); 98 XStream xstream = new XStream(); 99 xstream.alias("china", List.class);//给List类型指定别名为china 100 xstream.alias("province", Province.class);//给Province指定别名为province 101 xstream.alias("city", City.class);//给City类型指定别名为city 102 xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性 103 xstream.addImplicitCollection(Province.class, "cities");//去除Provice类的名为cities的List类型的属性! 104 /* 105 * 让City类的,名为description属性不生成对应的xml元素 106 */ 107 xstream.omitField(City.class, "description"); 108 String s = xstream.toXML(proList); 109 System.out.println(s); 110 } 111 }
1 public class City { 2 private String name;//市名 3 private String description;//描述 4 public String getName() { 5 return name; 6 } 7 public void setName(String name) { 8 this.name = name; 9 } 10 public String getDescription() { 11 return description; 12 } 13 public void setDescription(String description) { 14 this.description = description; 15 } 16 @Override 17 public String toString() { 18 return "City [name=" + name + ", description=" + description + "]"; 19 } 20 public City() { 21 super(); 22 // TODO Auto-generated constructor stub 23 } 24 public City(String name, String description) { 25 super(); 26 this.name = name; 27 this.description = description; 28 } 29 }
1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class Province { 5 private String name;// 省名 6 private List<City> cities = new ArrayList<City>(); 7 8 public String getName() { 9 return name; 10 } 11 12 public void setName(String name) { 13 this.name = name; 14 } 15 16 public List<City> getCities() { 17 return cities; 18 } 19 20 public void setCities(List<City> cities) { 21 this.cities = cities; 22 } 23 24 public void addCity(City city) { 25 cities.add(city); 26 } 27 }
fun1输出结果:
1 <list> 2 <Province> 3 <name>北京</name> 4 <cities> 5 <City> 6 <name>东城区</name> 7 <description>DongChengQu</description> 8 </City> 9 <City> 10 <name>昌平区</name> 11 <description>ChangPingQu</description> 12 </City> 13 </cities> 14 </Province> 15 <Province> 16 <name>辽宁</name> 17 <cities> 18 <City> 19 <name>沈阳</name> 20 <description>shenYang</description> 21 </City> 22 <City> 23 <name>葫芦岛</name> 24 <description>huLuDao</description> 25 </City> 26 </cities> 27 </Province> 28 </list>
fun2输出结果:
1 <china> 2 <province> 3 <name>北京</name> 4 <cities> 5 <city> 6 <name>东城区</name> 7 <description>DongChengQu</description> 8 </city> 9 <city> 10 <name>昌平区</name> 11 <description>ChangPingQu</description> 12 </city> 13 </cities> 14 </province> 15 <province> 16 <name>辽宁</name> 17 <cities> 18 <city> 19 <name>沈阳</name> 20 <description>shenYang</description> 21 </city> 22 <city> 23 <name>葫芦岛</name> 24 <description>huLuDao</description> 25 </city> 26 </cities> 27 </province> 28 </china>
fun3输出结果:
1 <china> 2 <province name="北京"> 3 <cities> 4 <city> 5 <name>东城区</name> 6 <description>DongChengQu</description> 7 </city> 8 <city> 9 <name>昌平区</name> 10 <description>ChangPingQu</description> 11 </city> 12 </cities> 13 </province> 14 <province name="辽宁"> 15 <cities> 16 <city> 17 <name>沈阳</name> 18 <description>shenYang</description> 19 </city> 20 <city> 21 <name>葫芦岛</name> 22 <description>huLuDao</description> 23 </city> 24 </cities> 25 </province> 26 </china>
fun4输出结果:
1 <china> 2 <province name="北京"> 3 <city> 4 <name>东城区</name> 5 <description>DongChengQu</description> 6 </city> 7 <city> 8 <name>昌平区</name> 9 <description>ChangPingQu</description> 10 </city> 11 </province> 12 <province name="辽宁"> 13 <city> 14 <name>沈阳</name> 15 <description>shenYang</description> 16 </city> 17 <city> 18 <name>葫芦岛</name> 19 <description>huLuDao</description> 20 </city> 21 </province> 22 </china>
fun5输出结果:
1 <china> 2 <province name="北京"> 3 <city> 4 <name>东城区</name> 5 </city> 6 <city> 7 <name>昌平区</name> 8 </city> 9 </province> 10 <province name="辽宁"> 11 <city> 12 <name>沈阳</name> 13 </city> 14 <city> 15 <name>葫芦岛</name> 16 </city> 17 </province> 18 </china>