您的位置:首页 > 编程语言 > Java开发

XStream-----把JavaBean转换为xml的工具

2016-11-21 00:36 344 查看
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 <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>


fun5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: