Xstream使用的相關細節(javaBean轉換成xml文檔)

1. 導入jar包

jar包:xstream-1.4.7.jar與依賴包xpp3_min-1.1.4c.jar.。

2. 創建javaBean(示例)

//城市類
package cn.yellowimg.demo1;

public class City {
    private String name;//市名
    private String description;
    @Override
    public String toString() {
        return "City [name=" + name + ", 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;
    }
    public City() {
        super();
        // TODO Auto-generated constructor stub
    }
    public City(String name, String description) {
        super();
        this.name = name;
        this.description = description;
    }

}
//省類
package cn.yellowimg.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;
    }
    //創建該方法的原因是方便往cities添加City對象
    public void addCity(City city)
    {
        cities.add(city);
    }
}

3.創建一個國家集合(List<Province>

public class Demo1 {

    public List<Province> getProvinceList()
    {
        List<Province> provinceList = new ArrayList<Province>();

        Province p1 = new Province();
        p1.setName("北京");
        p1.addCity(new City("海淀區","haidian"));
        p1.addCity(new City("朝陽區","chaoyang"));
        provinceList.add(p1);

        return provinceList;
    }

4. 測試類

    @Test
    public void fun1()
    {
        List<Province> provinceList = getProvinceList();

        /**
         * 創建Xstream對象
         * 調用toXMl把集合轉換成xml字符串
         */
        XStream xStream = new XStream();

        String xml = xStream.toXML(provinceList);

        System.out.println(xml);
    }

5.運行結果

<list>------->對應provinceList對象
  <cn.yellowimg.demo1.Province>------->對應Province對象
    <name>北京</name>------->對應Province對象的屬性name
    <cities>------->對應Province對象的屬性cities
      <cn.yellowimg.demo1.City>------->對應City對象
        <name>海淀區</name>------->對應City對象的屬性name
            <description>haidian</description>------->對應City對象的屬性description
      </cn.yellowimg.demo1.City>
      <cn.yellowimg.demo1.City>
        <name>朝陽區</name>
        <description>chaoyang</description>
      </cn.yellowimg.demo1.City>
    </cities>
  </cn.yellowimg.demo1.Province>
</list>

6.改進需求

  • 將list改爲china
  • cn.yellowimg.demo1.Province修改爲province
  • cn.yellowimg.demo1.City修改爲city。
    @Test
    public void fun2()
    {
        List<Province> provinceList = getProvinceList();

        /**
         * 創建Xstream對象
         * 調用toXMl把集合轉換成xml字符串
         */
        XStream xStream = new XStream();


        /**
        *   xStream.alias(String name,Class type)爲一個對象類型起別名
        *   name爲修改之後的別名,type爲對象類型
        */
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);

        String xml = xStream.toXML(provinceList);

        System.out.println(xml);
    }

結果:

<china>
  <province>
    <name>北京</name>
    <cities>
      <city>
        <name>海淀區</name>
        <description>haidian</description>
      </city>
      <city>
        <name>朝陽區</name>
        <description>chaoyang</description>
      </city>
    </cities>
  </province>
</china>

  • 將province下的name元素變爲province的屬性
    @Test
    public void fun3()
    {
        List<Province> provinceList = getProvinceList();

        /**
         * 創建Xstream對象
         * 調用toXMl把集合轉換成xml字符串
         */
        XStream xStream = new XStream();


        /**
        *   xStream.alias(String name,Class type)爲一個對象類型起別名
        *   name爲修改之後的別名,type爲對象類型
        */
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);
        /**
        *   xStream.useAttributeFor(Class type,String field);
        *   useAttributeFor()的意思是將某個對象類型的字段變爲屬性
        */
        xStream.useAttributeFor(Province.class,"name");

        String xml = xStream.toXML(provinceList);

        System.out.println(xml);
    }
<china>
  <province name="北京">
    <cities>
      <city>
        <name>海淀區</name>
        <description>haidian</description>
      </city>
      <city>
        <name>朝陽區</name>
        <description>chaoyang</description>
      </city>
    </cities>
  </province>
</china>

  • 去除無用的集合屬性<cities>元素
    @Test
    public void fun4()
    {
        List<Province> provinceList = getProvinceList();

        /**
         * 創建Xstream對象
         * 調用toXMl把集合轉換成xml字符串
         */
        XStream xStream = new XStream();

        xStream.alias("china",List.class);
        xStream.alias( "province",Province.class);
        xStream.alias("city",City.class);

        xStream.useAttributeFor(Province.class,"name");
        /**
        * xStream.addImplicitCollection(Class type,String field);
        * 去除無用的集合屬性,直接顯示list類型裏的元素。
        * 我們需要Collection的內容,而不希望Collection本身也成爲一個元素
        /
        xStream.addImplicitCollection(Province.class, "cities");

        String xml = xStream.toXML(provinceList);
        System.out.println(xml);
    }
<china>
  <province name="北京">
    <city>
      <name>海淀區</name>
      <description>haidian</description>
    </city>
    <city>
      <name>朝陽區</name>
      <description>chaoyang</description>
    </city>
  </province>
</china>

  • 刪除<description>元素
    @Test
    public void fun5()
    {
        List<Province> provinceList = getProvinceList();

        /**
         * 創建Xstream對象
         * 調用toXMl把集合轉換成xml字符串
         */
        XStream xStream = new XStream();

        xStream.alias("china",List.class);
        xStream.alias( "province",Province.class);
        xStream.alias("city",City.class);

        xStream.useAttributeFor(Province.class,"name");

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

        /**
        * xStream.omitField(Class type, String field);
        * 忽略對象中的某個屬性。
        */
        xStream.omitField(City.class, "description");

        String xml = xStream.toXML(provinceList);
        System.out.println(xml);
    }
<china>
  <province name="北京">
    <city>
      <name>海淀區</name>
    </city>
    <city>
      <name>朝陽區</name>
    </city>
  </province>
</china>

大功告成!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章