zoukankan      html  css  js  c++  java
  • XStream学习笔记

    时间:2017-1-1 17:50

    1、XStream的作用
        可以把JavaBean转换为(序列化)XML。

    2、XStream相关jar包
        可以到http://xstream.codehaus.org/去下载XStream的安装包

        XStream必导jar包:
            *   核心jar包:xstream-1.4.7.jar
            *   依赖jar包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器)

    3、使用步骤
        *   XStream xStrem = new XStream();
        *   String xml = xStream.toXML(JavaBean);

    4、使用细节
        *   修改类型对应的元素名
            >   xStream.alias("china", List.class);
                让List类型生成的元素名为china
            >   xStream.alias("province", Province.class);
                让Province类型生成的元素名为province

        *   让类的成员变为XML标签的属性
            默认类的成员生成的元素是子元素,我们希望让类的成员生成为标签的属性。
            >   xStream.useAttributeFor(Province.class, "name")
                把Province类的名为name的成员,生成<province>标签的属性:<province name="...">

        *   去除无用的集合类型的成员
            我们只需要将Collection的内容生成元素,而不希望将Collection本身也生成一个XML元素。
            >   xStream.addImplicitCollection(Province.class, "cities")
                让Province类的名为cities的集合类型的成员不生成元素
                cities的类型是List类型的,它的内容还会生成子元素

        *   去除指定类的指定成员,让其不生成XML元素
            >   xStream.omitField(City.class, "description")
                在生成的XML中,不会出现City类中名为description对应的元素。

    =============================================================================

    示例代码:

    ----------------------------------------------------------------------------------------------------------------------------

    Province.class

    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;
        }
    }

    ----------------------------------------------------------------------------------------------------------------------------


    City.class

    public class City {
        private String name; // 城市名
        private String description; // 描述
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        @Override
        public String toString() {
            return "City [name=" + name + ", description=" + description + "]";
        }
     
        public City(String name, String description) {
            super();
            this.name = name;
            this.description = description;
        }
     
        public City() {
            super();
        }
    }
     

    ----------------------------------------------------------------------------------------------------------------------------

    Demo.class

    import java.util.ArrayList;
    import java.util.List;
     
    import org.junit.Test;
     
    import com.thoughtworks.xstream.XStream;
     
    public class Demo {

    /*
     * 返回JavaBean集合
     */ 
    public List<Province> getProvinceList(){
        Province p1 = new Province();
        p1.setName("山东");
        p1.addCity(new City("潍坊", "WeiFang"));
        p1.addCity(new City("青岛", "QingDao"));
     
        Province p2 = new Province();
        p2.setName("江苏");
        p2.addCity(new City("南京", "NanJing"));
        p2.addCity(new City("苏州", "SuZhou"));
     
        List<Province> provinceList = new ArrayList<Province>();
        provinceList.add(p1);
        provinceList.add(p2);
     
        return provinceList;
    }


    /*
     * 转换XML
     */

    /**
    <list>  -- List类型显示list
      <com.wyc.Province>  -- JavaBean的类型为Province,它的元素名称为类的完整包名
        <name>山东</name>  -->  JavaBean的属性名
        <cities>  -->  JavaBean的属性名
          <com.wyc.City>  -->  完整类名
            <name>潍坊</name>  -->  属性名
            <description>WeiFang</description>  -->  属性名
          </com.wyc.City>
          <com.wyc.City>
            <name>青岛</name>
            <description>QingDao</description>
          </com.wyc.City>
        </cities>
      </com.wyc.Province>
      <com.wyc.Province>
        <name>江苏</name>
        <cities>
          <com.wyc.City>
            <name>南京</name>
            <description>NanJing</description>
          </com.wyc.City>
          <com.wyc.City>
            <name>苏州</name>
            <description>SuZhou</description>
          </com.wyc.City>
        </cities>
      </com.wyc.Province>
    </list>
    */
    @Test
    public void fun1(){
        List<Province> provinceList = getProvinceList();
        /*
         * 创建XStream对象
         * 调用toXML()方法把集合转换成XML字符串
         */
        XStream xStream = new XStream();
        String s = xStream.toXML(provinceList);
        System.out.println(s);
    }


    /*
     * 修改XML元素名称(alias)
     * 1、把默认的List对应的<list>元素修改为<china>元素
     * 2、把默认的Province类型对应的<com.wyc.Province>修改为<province>元素
     * 3、把默认的City类型对应的<com.wyc.City>修改为<city>元素
     */
    /**
    <china>
      <province>
        <name>山东</name>
        <cities>
          <city>
            <name>潍坊</name>
            <description>WeiFang</description>
          </city>
          <city>
            <name>青岛</name>
            <description>QingDao</description>
          </city>
        </cities>
      </province>
      <province>
        <name>江苏</name>
        <cities>
          <city>
            <name>南京</name>
            <description>NanJing</description>
          </city>
          <city>
            <name>苏州</name>
            <description>SuZhou</description>
          </city>
        </cities>
      </province>
    </china>
    */
    @Test
    public void fun2(){
        List<Province> provinceList = getProvinceList();
        XStream xStream = new XStream();
        /*
         * 给指定的类型指定别名
         */
        xStream.alias("china", List.class); // 给List类型指定别名为china
        xStream.alias("province", Province.class); // 给Province指定别名为province
        xStream.alias("city", City.class);
        String s = xStream.toXML(provinceList);
        System.out.println(s);
    }


    /*
     * 默认JavaBean的属性都会生成子元素,而现在希望将JavaBean的成员生成为元素的属性
     */
    /**
    <china>
      <province name="山东">
        <cities>
          <city>
            <name>潍坊</name>
            <description>WeiFang</description>
          </city>
          <city>
            <name>青岛</name>
            <description>QingDao</description>
          </city>
        </cities>
      </province>
      <province name="江苏">
        <cities>
          <city>
            <name>南京</name>
            <description>NanJing</description>
          </city>
          <city>
            <name>苏州</name>
            <description>SuZhou</description>
          </city>
        </cities>
      </province>
    </china>
    */
    @Test
    public void fun3(){
        List<Province> provinceList = getProvinceList();
        XStream xStream = new XStream();
        xStream.alias("china", List.class); // 给List类型指定别名为china
        xStream.alias("province", Province.class); // 给Province指定别名为province
        xStream.alias("city", City.class);
     
        /*
         * 把Province类型的name属性,修改为<province>元素的标签属性
         */
     
        // 将Province类的name属性应用为标签属性
        xStream.useAttributeFor(Province.class, "name");
     
        String s = xStream.toXML(provinceList);
        System.out.println(s);
    }




    /*
     * 去除无用的集合属性,只将集合中的元素生成XML元素
     */
    /**
    <china>
      <province name="山东">
        <city>
          <name>潍坊</name>
          <description>WeiFang</description>
        </city>
        <city>
          <name>青岛</name>
          <description>QingDao</description>
        </city>
      </province>
      <province name="江苏">
        <city>
          <name>南京</name>
          <description>NanJing</description>
        </city>
        <city>
          <name>苏州</name>
          <description>SuZhou</description>
        </city>
      </province>
    </china>
    */
    @Test
    public void fun4(){
        List<Province> provinceList = getProvinceList();
        XStream xStream = new XStream();
        xStream.alias("china", List.class); // 给List类型指定别名为china
        xStream.alias("province", Province.class); // 给Province指定别名为province
        xStream.alias("city", City.class);
        xStream.useAttributeFor(Province.class, "name"); // 把Province类型的name属性,修改为<province>元素的标签属性
     
        /*
         * 去除<cities>等作为属性的集合元素,只获取集合中的值
         */
     
        // 去除Province类的名为cities的List类型的属性
        xStream.addImplicitCollection(Province.class, "cities");
     
        String s = xStream.toXML(provinceList);
        System.out.println(s);
    }



    /*
     * 去除不想要的JavaBean属性
     * 让某些JavaBean属性不生成对应的XML元素
     */
    /**
    <china>
      <province name="山东">
        <city>
          <name>潍坊</name>
        </city>
        <city>
          <name>青岛</name>
        </city>
      </province>
      <province name="江苏">
        <city>
          <name>南京</name>
        </city>
        <city>
          <name>苏州</name>
        </city>
      </province>
    </china>
    */
    @Test
    public void fun5(){
        List<Province> provinceList = getProvinceList();
        XStream xStream = new XStream();
        xStream.alias("china", List.class); // 给List类型指定别名为china
        xStream.alias("province", Province.class); // 给Province指定别名为province
        xStream.alias("city", City.class);
        xStream.useAttributeFor(Province.class, "name"); // 把Province类型的name属性,修改为<province>元素的标签属性
        xStream.addImplicitCollection(Province.class, "cities"); // 去除<cities>等作为属性的集合元素,只获取集合中的值
     
        /*
         * 让City类的description属性不生成对应的XML元素
         */
        xStream.omitField(City.class, "description");
     
        String s = xStream.toXML(provinceList);
        System.out.println(s);
    }
    }
  • 相关阅读:
    python闭包&深浅拷贝&垃圾回收&with语句
    Python基本数据类型
    面向对象
    四则运算2
    周总结01
    软件工程个人作业01
    java web中乱码的种类和一些解决方式
    java web 增加信息课堂测试00
    课程00作业
    动手动脑07
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375367.html
Copyright © 2011-2022 走看看