zoukankan      html  css  js  c++  java
  • XStream(可把JavaBean转换成XML的小工具)

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

    代码示例:

    Province:

    package com.xjs.demo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Province {
        private String name;// 省名
        private List<City> cities = new ArrayList<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;
        }
    
        public void addCity(City city) {
            cities.add(city);
        }
    }

     City:

    package com.xjs.demo1;
    
    public class City {
        private String name;// 市名
        private String description;// 描述
    
        public City() {
    
        }
    
        public City(String name, String description) {
            super();
            this.name = name;
            this.description = 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 + "]";
        }
    }

     Demo1:

    package com.xjs.demo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.junit.Test;
    
    import com.thoughtworks.xstream.XStream;
    
    /**
     * 演示
     * @author hp
     *
     */
    public class Demo1 {
        //返回JavaBean集合
        public List<Province> getProvinceList(){
            Province p1=new Province();
            p1.setName("北京");
            p1.addCity(new City("东城区","DongChengQu"));
            p1.addCity(new City("昌平区","ChangPingQu"));
            
            Province p2=new Province();
            p2.setName("辽宁");
            p2.addCity(new City("沈阳","shenYang"));
            p2.addCity(new City("葫芦岛","HuLuDao"));
            List<Province> provinceList=new ArrayList<Province>();
            provinceList.add(p1);
            provinceList.add(p2);
            
            return provinceList;
        }
        
        
        @Test
        public void fun1(){
            List<Province> proList=getProvinceList();
            /*
             * 创建XStream对象
             * 调用toXML把集合转换成xml字符串
             */
            XStream xs=new XStream();
            String xml = xs.toXML(proList);
            System.out.println(xml);
        }
        
        /*
         * 别名
         * 希望:
         *         >默认List类型对应<List>元素,希望让List类型对应<china>元素
         *         >默认Province类型对应<com.xjs.demo1.Province>,希望它对应<province>
         *         >默认City类型对应<com.xjs.demo1.City>,希望对应<city>
         */
        @Test
        public void fun2(){
            List<Province> proList=getProvinceList();
            XStream xs=new XStream();
            /*
             * 给指定的类型指定别名
             */
            xs.alias("china", List.class);//
            xs.alias("province", Province.class);
            xs.alias("city", City.class);
            
            String xml = xs.toXML(proList);
            System.out.println(xml);
        }
        
        /*
         * 默认JavaBean的属性都会生成子元素,而现在希望生成元素的属性
         */
        @Test
        public void fun3(){
            List<Province> proList=getProvinceList();
            XStream xs=new XStream();
            xs.alias("china", List.class);//List类型指定别名为china
            xs.alias("province", Province.class);
            xs.alias("city", City.class);
            
            /*
             * 把Province类型的name属性,生成<province>元素的属性
             */
            
            xs.useAttributeFor(Province.class, "name");
            
            String xml = xs.toXML(proList);
            System.out.println(xml);
        }
        
        /*
         * 去除List类型的属性,只把List中的元素生成XML
         */
        @Test
        public void fun4(){
            List<Province> proList=getProvinceList();
            XStream xs=new XStream();
            xs.alias("china", List.class);//List类型指定别名为china
            xs.alias("province", Province.class);
            xs.alias("city", City.class);
            
            /*
             * 把Province类型的name属性,生成<province>元素的属性
             */
            
            xs.useAttributeFor(Province.class, "name");
            
            /*
             * 去除<cities>这样Collection类型的属性
             * 去除Province类的名为cities的List类型的属性
             */
            xs.addImplicitCollection(Province.class, "cities");
            
            
            String xml = xs.toXML(proList);
            System.out.println(xml);
        }
        
        /*
         * 去除某个JavaBean中的属性
         */
        @Test
        public void fun5(){
            List<Province> proList=getProvinceList();
            XStream xs=new XStream();
            xs.alias("china", List.class);//List类型指定别名为china
            xs.alias("province", Province.class);
            xs.alias("city", City.class);
            
            xs.useAttributeFor(Province.class, "name");
            xs.addImplicitCollection(Province.class, "cities");
            
            /*
             * 让City类的description属性不生成对应 的xml元素
             */
            xs.omitField(City.class, "description");
            
            String xml = xs.toXML(proList);
            System.out.println(xml);
        }
    }
  • 相关阅读:
    C++内存泄露问题
    高级自动化排程 几种前沿算法浅析
    python读写excel
    翻译】geosoft C++ Programming Style Guidelines (已翻译完毕,大家看看自己总结出了哪些吧!)
    python画图库
    pytho:栈和队列
    有监督分类:支持向量机support vector machine(svm)
    恢复数据工具比较
    SQL公式一直设不成功
    WriteFile写磁盘扇区是87错误的原因
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/11009801.html
Copyright © 2011-2022 走看看