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 }