XStream的使用

一:功能

  可以将JavaBean转换(序列化)成XMl

二:依赖jar包

  xstream.jar

  xpp3_min.jar(xml pull parser)xml解析器

三:使用步骤

  XStream xstream = new XStream();

  String xmlStream = xstream.toXML(JavaBean);

四:使用细节

  别名:把对应的元素名改了,因为生成的元素名会包含整个JavaBean的全路径

//        指定别名
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);

  使用为属性,默认类的成员,生成的是子元素,我们希望将它改为属性,如name

//        把Province类型的name属性,生成<province>元素的属性
        xStream.useAttributeFor(Province.class,"name");

  去除collection类型的成员名,只是需要collection的内容,不希望collection本身再生成一个子节点去包含它的内容

        xStream.addImplicitCollection(Province.class,"citys");

  去除类的指定的成员名,JavaBean可能包含我们不需要在XML中使用的属性,所以需要去除多有的成员

  xStream.omitField(City.class,"description");

五:源码

JavaBean

package xstream;

/**
 * Created by YuWenHui on 2017/4/24 0024.
 */
public class City {
    private String name;
    private String description;

    public City(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public City() {
        super();
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package xstream;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by YuWenHui on 2017/4/24 0024.
 */
public class Province {
    private String name;
    List<City> citys = new ArrayList<City>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<City> getCitys() {
        return citys;
    }

    public void setCitys(List<City> citys) {
        this.citys = citys;
    }

    public void addCity(City city){
        citys.add(city);
    }
}

dome

package xstream;

import com.thoughtworks.xstream.XStream;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by YuWenHui on 2017/4/24 0024.
 */
public class Dome {
    // 返回javabean集合
    public List<Province> getProinvceList() {
        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("上饶", "ShangRao"));
        p2.addCity(new City("宜春", "YiChun"));

        List<Province> provinceList = new ArrayList<Province>();
        provinceList.add(p1);
        provinceList.add(p2);

        return provinceList;
    }
    @org.junit.Test
    public void test(){
        List<Province> provinceList = getProinvceList();
        XStream xStream = new XStream();
//        指定别名
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);
//        把Province类型的name属性,生成<province>元素的属性
        xStream.useAttributeFor(Province.class,"name");
//        去除collection类型的成员名,只是需要collection的内容,不希望collection本身再生成一个子节点去包含它的内容
        xStream.addImplicitCollection(Province.class,"citys");
//        去除类的指定的成员名,JavaBean可能包含我们不需要在XML中使用的属性,所以需要去除多有的成员
        xStream.omitField(City.class,"description");
        String s = xStream.toXML(provinceList);
        System.out.println(s);
    }
}

 

六:结果

<china>
<province name="北京">
<city>
<name>东城区</name>
</city>
<city>
<name>昌平区</name>
</city>
</province>
<province name="江西">
<city>
<name>上饶</name>
</city>
<city>
<name>宜春</name>
</city>
</province>
</china>

posted @ 2017-04-24 19:54  西瓜的小弟西西瓜  阅读(379)  评论(0编辑  收藏  举报