xStream(javabean转换成xml)

1、什么作用

将JavaBean转换为(序列化)为xml。这样就可以和ajax技术对接上,服务器可以将对象转换成xml,在使用ajax技术发送给客户端。

2、使用jar包

  • 核心jar包:stream-1.4.7.jar
  • 必须依赖包:xpp3_min-1.1.4c.jar (XML pull parser: 一款速度很快的xml解析器)

3、使用步骤

  • XStream xstream=new XStream();
  • String xmlStr=xstream.toXML(javabean);

案例:
City.java

public class City {
    private String name;        //市名
    private String desctiption; //描述
    public String getName() {
        return name;
    }
    public City(String name, String desctiption) {
        super();
        this.name = name;
        this.desctiption = desctiption;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDesctiption() {
        return desctiption;
    }
    public void setDesctiption(String desctiption) {
        this.desctiption = desctiption;
    }
    @Override
    public String toString() {
        return "City [name=" + name + ", desctiption=" + desctiption + "]";
    }

Province.java

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);
    }

Test.java

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("葫芦头","huloutou"));
        p2.addCity(new City("沈阳","shengyang"));

        List<Province> ps=new ArrayList<Province>();
        ps.add(p1);
        ps.add(p2);
        return ps;
    }
    @Test
    public void fun(){
        List<Province> ps=getProvinceList();
        XStream xStream = new XStream();//创建XStream对象
        String s=xStream.toXML(ps);//调用toXML把集合转换成xml字符集
        System.out.println(s);
    }

执行结果:

<list>                             //List类型显示list
    <cn.itcast.xstream.Province>  //javabean的类型,显示它类的完整名 
       <name>北京</name>             //javabean的属性名
       <cities>
          <cn.itcast.xstream.City>   //类名
              <name>东城区</name>       //属性名
              <desctiption>dongchengqu</desctiption>
          </cn.itcast.xstream.City>
         <cn.itcast.xstream.City>
             <name>昌平区</name>
             <desctiption>changpingqu</desctiption>
         </cn.itcast.xstream.City>
       </cities>
   </cn.itcast.xstream.Province>

   <cn.itcast.xstream.Province>
        <name>辽宁</name>
        <cities>
           <cn.itcast.xstream.City>
              <name>葫芦头</name>
              <desctiption>huloutou</desctiption>
           </cn.itcast.xstream.City>

          <cn.itcast.xstream.City>
             <name>沈阳</name>
             <desctiption>shengyang</desctiption>
          </cn.itcast.xstream.City>
       </cities>
  </cn.itcast.xstream.Province>
</list>

改善:
1、给标签起别名(alias):xstream.alias("别名",对象.class)
              - 默认List类型对应的元素,希望让List类型对应<china>元素
              - 默认Province类型为<cn.itcast.demo.Province>,希望让它对应
              - 默认City类型对应<cn.itcast.demo1.City>,希望它对应<city>元素。

给指定的类型指定别名

xstream.alias("china",List.class);         //List类型指定别名为China
xstream.alias("province",Province.class);  //Province类型指定别名为province
xstream.alias("city",City.class);         //City类型指定别名为city

String s=xstream.toXML(ps);

2、将类型属性转换成标签属性
              * 把Province类型的属性,生成<province>元素的属性。

xstream.userAttributeFor(Province.class,"name"); //将类型属性转化成标签属性

3、去除Collection类型的成员:只需要Collection的内容,不希望类的成员生成元素的属性

xstram.addImplicitCollection(Province.class,"cities");//Provice类的名为cities(它是List类型,他的内容还会生成元素)的成员不生成元素

4、去除类的指定成员:让其不生成xml元素

xstream.omitField(City.class,"description")  //在生成的xml中不出出现City类的名为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>

猜你喜欢

转载自blog.csdn.net/ma_chen_qq/article/details/77923806