zoukankan      html  css  js  c++  java
  • XStream(xml/bean转换)

    XStream

    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的对应的元素!

    具体实例

    [java] view plain copy
     
    1. package cn.itcast.demo1;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5.   
    6. import org.junit.Test;  
    7.   
    8. import com.thoughtworks.xstream.XStream;  
    9.   
    10. /** 
    11.  * 演示XStream 
    12.  * @author cxf 
    13.  * 
    14.  */  
    15. public class Demo1 {  
    16.     // 返回javabean集合  
    17.     public List<Province> getProinvceList() {  
    18.         Province p1 = new Province();  
    19.         p1.setName("北京");  
    20.         p1.addCity(new City("东城区", "DongChengQu"));  
    21.         p1.addCity(new City("昌平区", "ChangPingQu"));  
    22.           
    23.         Province p2 = new Province();  
    24.         p2.setName("辽宁");  
    25.         p2.addCity(new City("沈阳", "shenYang"));  
    26.         p2.addCity(new City("葫芦岛", "huLuDao"));  
    27.           
    28.         List<Province> provinceList = new ArrayList<Province>();  
    29.         provinceList.add(p1);  
    30.         provinceList.add(p2);  
    31.           
    32.         return provinceList;  
    33.     }  
    34.       
    35.     /** 
    36. <list> --> List类型显示list 
    37.   <cn.itcast.demo1.Province> --> javabean的类型为Province,它元素的名称为类的完整名 
    38.     <name>北京</name> --> javabean的属性名 
    39.     <cities> --> javabean的属性名 
    40.       <cn.itcast.demo1.City> --> 类名 
    41.         <name>东城区</name> --> 属性名 
    42.         <description>DongChengQu</description> --> 属性名 
    43.       </cn.itcast.demo1.City> 
    44.       <cn.itcast.demo1.City> 
    45.         <name>昌平区</name> 
    46.         <description>ChangPingQu</description> 
    47.       </cn.itcast.demo1.City> 
    48.     </cities> 
    49.   </cn.itcast.demo1.Province> 
    50.   <cn.itcast.demo1.Province> 
    51.     <name>辽宁</name> 
    52.     <cities> 
    53.       <cn.itcast.demo1.City> 
    54.         <name>沈阳</name> 
    55.         <description>shenYang</description> 
    56.       </cn.itcast.demo1.City> 
    57.       <cn.itcast.demo1.City> 
    58.         <name>葫芦岛</name> 
    59.         <description>huLuDao</description> 
    60.       </cn.itcast.demo1.City> 
    61.     </cities> 
    62.   </cn.itcast.demo1.Province> 
    63. </list> 
    64.      */  
    65.     @Test  
    66.     public void fun1() {  
    67.         List<Province> proList = getProinvceList();  
    68.         /* 
    69.          * 创建XStream对象 
    70.          * 调用toXML把集合转换成xml字符串 
    71.          */  
    72.         XStream xstream = new XStream();  
    73.         String s = xstream.toXML(proList);  
    74.         System.out.println(s);  
    75.     }  
    76.       
    77.     /* 
    78.      * 别名(alias) 
    79.      * 希望: 
    80.      * * 默认List类型对应<list>元素,希望让List类型对应<china>元素 
    81.      * * 默认Province类型对应<cn.itcast.demo1.Province>,希望让它对应<province> 
    82.      * * 默认City类型对应<cn.itcast.demo1.City>,希望它对应<city>元素 
    83.      */  
    84.     /* 
    85. <china> 
    86.   <province> 
    87.     <name>北京</name> 
    88.     <cities> 
    89.       <city> 
    90.         <name>东城区</name> 
    91.         <description>DongChengQu</description> 
    92.       </city> 
    93.       <city> 
    94.         <name>昌平区</name> 
    95.         <description>ChangPingQu</description> 
    96.       </city> 
    97.     </cities> 
    98.   </province> 
    99.   <province> 
    100.     <name>辽宁</name> 
    101.     <cities> 
    102.       <city> 
    103.         <name>沈阳</name> 
    104.         <description>shenYang</description> 
    105.       </city> 
    106.       <city> 
    107.         <name>葫芦岛</name> 
    108.         <description>huLuDao</description> 
    109.       </city> 
    110.     </cities> 
    111.   </province> 
    112. </china> 
    113.      */  
    114.     @Test  
    115.     public void fun2() {  
    116.         List<Province> proList = getProinvceList();  
    117.         XStream xstream = new XStream();  
    118.         /* 
    119.          * 给指定的类型指定别名 
    120.          */  
    121.         xstream.alias("china", List.class);//给List类型指定别名为china  
    122.         xstream.alias("province", Province.class);//给Province指定别名为province  
    123.         xstream.alias("city", City.class);//给City类型指定别名为city  
    124.           
    125.           
    126.         String s = xstream.toXML(proList);  
    127.         System.out.println(s);  
    128.     }  
    129.       
    130.     /* 
    131.      * 默认javabean的属性都会生成子元素,而现在希望生成元素的属性 
    132.      */  
    133. /* 
    134. <china> 
    135.   <province name="北京"> 
    136.     <cities> 
    137.       <city> 
    138.         <name>东城区</name> 
    139.         <description>DongChengQu</description> 
    140.       </city> 
    141.       <city> 
    142.         <name>昌平区</name> 
    143.         <description>ChangPingQu</description> 
    144.       </city> 
    145.     </cities> 
    146.   </province> 
    147.   <province name="辽宁"> 
    148.     <cities> 
    149.       <city> 
    150.         <name>沈阳</name> 
    151.         <description>shenYang</description> 
    152.       </city> 
    153.       <city> 
    154.         <name>葫芦岛</name> 
    155.         <description>huLuDao</description> 
    156.       </city> 
    157.     </cities> 
    158.   </province> 
    159.  */  
    160.     @Test  
    161.     public void fun3() {  
    162.         List<Province> proList = getProinvceList();  
    163.         XStream xstream = new XStream();  
    164.         xstream.alias("china", List.class);//给List类型指定别名为china  
    165.         xstream.alias("province", Province.class);//给Province指定别名为province  
    166.         xstream.alias("city", City.class);//给City类型指定别名为city  
    167.           
    168.           
    169.         /* 
    170.          * 把Province类型的name属性,生成<province>元素的属性 
    171.          */  
    172.         xstream.useAttributeFor(Province.class, "name");  
    173.           
    174.           
    175.         String s = xstream.toXML(proList);  
    176.         System.out.println(s);        
    177.     }  
    178.   
    179.       
    180.     /* 
    181.      * 去除List类型的属性,只把list中的元素生成xml元素 
    182.      */  
    183. /* 
    184. <china> 
    185.   <province name="北京"> 
    186.     <city> 
    187.       <name>东城区</name> 
    188.       <description>DongChengQu</description> 
    189.     </city> 
    190.     <city> 
    191.       <name>昌平区</name> 
    192.       <description>ChangPingQu</description> 
    193.     </city> 
    194.   </province> 
    195.   <province name="辽宁"> 
    196.     <city> 
    197.       <name>沈阳</name> 
    198.       <description>shenYang</description> 
    199.     </city> 
    200.     <city> 
    201.       <name>葫芦岛</name> 
    202.       <description>huLuDao</description> 
    203.     </city> 
    204.   </province> 
    205. </china> 
    206.  */  
    207.     @Test  
    208.     public void fun4() {  
    209.         List<Province> proList = getProinvceList();  
    210.         XStream xstream = new XStream();  
    211.         xstream.alias("china", List.class);//给List类型指定别名为china  
    212.         xstream.alias("province", Province.class);//给Province指定别名为province  
    213.         xstream.alias("city", City.class);//给City类型指定别名为city  
    214.         xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性  
    215.           
    216.           
    217.         /* 
    218.          * 去除<cities>这样的Collection类型的属性 
    219.          * 去除Provice类的名为cities的List类型的属性! 
    220.          */  
    221.         xstream.addImplicitCollection(Province.class, "cities");  
    222.           
    223.           
    224.         String s = xstream.toXML(proList);  
    225.         System.out.println(s);        
    226.     }  
    227.       
    228.     /** 
    229.      * 去除不想要的javabean属性 
    230.      * 就是让某引起javabean属性,不生成对应的xml元素! 
    231.      */  
    232. /* 
    233. <china> 
    234.   <province name="北京"> 
    235.     <city> 
    236.       <name>东城区</name> 
    237.     </city> 
    238.     <city> 
    239.       <name>昌平区</name> 
    240.     </city> 
    241.   </province> 
    242.   <province name="辽宁"> 
    243.     <city> 
    244.       <name>沈阳</name> 
    245.     </city> 
    246.     <city> 
    247.       <name>葫芦岛</name> 
    248.     </city> 
    249.   </province> 
    250. </china> 
    251.  */  
    252.     @Test  
    253.     public void fun5() {  
    254.         List<Province> proList = getProinvceList();  
    255.         XStream xstream = new XStream();  
    256.         xstream.alias("china", List.class);//给List类型指定别名为china  
    257.         xstream.alias("province", Province.class);//给Province指定别名为province  
    258.         xstream.alias("city", City.class);//给City类型指定别名为city  
    259.         xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性  
    260.         xstream.addImplicitCollection(Province.class, "cities");//去除Provice类的名为cities的List类型的属性!  
    261.           
    262.           
    263.         /* 
    264.          * 让City类的,名为description属性不生成对应的xml元素 
    265.          */  
    266.         xstream.omitField(City.class, "description");  
    267.           
    268.           
    269.         String s = xstream.toXML(proList);  
    270.         System.out.println(s);        
    271.     }  
    272. }  
  • 相关阅读:
    [bzoj3261]最大异或和(可持久化trie)
    [luogu3384] 【模板】树链剖分
    [luogu3369]普通平衡树(替罪羊树模板)
    fhq-treap模板
    [luogu3391] 【模板】文艺平衡树(fhq-treap反转区间)
    [luogu3369]普通平衡树(fhq-treap模板)
    [luogu3369]普通平衡树(treap模板)
    [bzoj3223]文艺平衡树(splay区间反转模板)
    A Path Plan(2018黑龙江省赛)
    Abandoned Animal(BAPC2017 Preliminaries )
  • 原文地址:https://www.cnblogs.com/wlsblog/p/7367441.html
Copyright © 2011-2022 走看看