XStream(可把JavaBean转换成XML的小工具)

时间:2019-06-12
本文章向大家介绍XStream(可把JavaBean转换成XML的小工具),主要包括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);
    }
}

原文地址:https://www.cnblogs.com/xjs1874704478/p/11009801.html