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);
    }
    }
  • 相关阅读:
    什么是 bean 的自动装配?
    什么是 Spring 的内部 bean?
    什么是 Spring 的 MVC 框架?
    Spring AOP and AspectJ AOP 有什么区别?
    解释 JDBC 抽象和 DAO 模块?
    volatile 类型变量提供什么保证?
    一个 Spring Bean 定义 包含什么?
    什么是 Spring MVC 框架的控制器?
    使用 Spring 访问 Hibernate 的方法有哪些?
    什么是 Callable 和 Future?
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375367.html
Copyright © 2011-2022 走看看