Fork me on GitHub

XStream

1. XStream 作用

  • 可以把 JavaBean 转换为(序列化) xml;

2. XStream 相关 jar 包

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

3. 使用步骤:

  • XStream xstream = new XStream();
  • String xmlStr = xstream.toXML(javaBean);
// City.java
    public class City{
        private String name;
        private String description;
        ...
    }

// Province.java
    public class Province {
        private String name;
        private List<City> cities = new ArrayList<City>();

        public addCity(City city){
            cities.add(city);
        }
    }

// XStream 使用
public class Demo{

    public List<Province> getProvince(){
        Province p1 = new Province("辽宁省");
        p1.addCity(new City("沈阳","shenyang"));
        p1.addCity(new City("大连","dalian"));

        Province p2 = new Province("吉林省");
        p2.addCity(new City("长春","changchun"));
        p2.addCity(new City("四平","siping"));

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

        return provinceList;
    }

    public void fun(){
        List<Province> proList = getProvince();

        XStream xstream = new XStream();
        String s = xstream.toXML(proList);
    }
}

// 输出结果
    <list>
    <cn.itcast.xstream.Province>
    <name>辽宁省</name>
    <cities>
      <cn.itcast.xstream.City>
        <name>沈阳</name>
        <description>shenyang</description>
      </cn.itcast.xstream.City>
      <cn.itcast.xstream.City>
        <name>大连</name>
        <description>dalian</description>
      </cn.itcast.xstream.City>
    </cities>
    </cn.itcast.xstream.Province>
    <cn.itcast.xstream.Province>
    <name>吉林省</name>
    <cities>
      <cn.itcast.xstream.City>
        <name>长春</name>
        <description>changchun</description>
      </cn.itcast.xstream.City>
      <cn.itcast.xstream.City>
        <name>四平</name>
        <description>siping</description>
      </cn.itcast.xstream.City>
    </cities>
    </cn.itcast.xstream.Province>
    </list>

// 更改别名
    /*
     * 默认 List 类型对应 <list> 元素, 希望让 List 类型对应 <china>
     * 默认 province 类型对应 <cn.itcast.xstream.Province>, 希望让它对应 <province>
     * 默认 City 类型对应 <cn.itcast.xstream.City>, 希望让它对应 <city> 元素
     *
     * 默认 JavaBean 的属性都会生成子元素! 希望让类的成员生成元素的属性
     *
     * 去除集合(Collection)类型的成员, 只保留 Collection 的内容
     */

     public void fun2(){
        List<Province> proList = getProvince();
        XStream xstream = new XStream();

        // 给指定的类型指定别名
        // 让 List 类型生成的元素名为 china
        xstream.alias("china",List.class);
        // 让 Province 类型生成的元素名为 province
        xstream.alias("province",Province.class);
        // 让 City 类型生成的元素名为 city
        xstream.alias("city",City.class);

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

        // 让 Province 类的名为 cities 的成员不生成元素
        // cities 是 List 类型, 也会生成元素
        xstream.addImplicitCollection(Province.class,"cities");

        // 让 city 类中名为 description 属性不生成对应的 xml 元素
        xstream.omitField(City.class,"description");
     }

//  输出结果:
    <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-10-08 23:21  小a的软件思考  阅读(164)  评论(0编辑  收藏  举报