JavaWeb之XStream使用

XStream的作用

XStream可以把JavaBean对象转换成xml文件。通常服务器给客户端响应的数据是来自数据库的一组对象,这时通过把对象转化成xml再响应给客户端,可以使用XStream。

XSteam具体使用

XSteam的jar包

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

使用步骤

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

使用细节:

设置别名:xstream.alias(别名, 类)

将子元素设置成属性:xstream.useAttributeFor(类名, 子元素名)

去除Collection类型的标签名: xstream.addImplicitCollection(类名, 元素名)

去除指定类名,不生成对应的xml元素:xstream.omitField(类名, 元素名)

具体代码示例

建立两个javabean:City.java和Province.java

public class City {

    String name;//城市名
    String description;//城市描述


    public City(){

    }
    public City(String name,String description){
        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;
    }
}

Province.java

public class Province {

    String name;//省份名
    List<City> arrayList=new ArrayList<>();

    public String getName() {
        return name;
    }

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

    public List<City> getArrayList() {
        return arrayList;
    }

    public void setArrayList(List<City> arrayList) {
        this.arrayList = arrayList;
    }

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

测试类:XStreamTest.java

public class XStreamTest {


    public List<Province> getProvince(){

        List<Province> provinceList=new ArrayList<>();
        Province province1=new Province();
        province1.setName("北京");
        City city1=new City("海淀区","haidianQu");
        City city2=new City("西土城区","xituchengQu");

        province1.addCity(city1);
        province1.addCity(city2);

        Province province2=new Province();


        province2.setName("安徽");
        City city3=new City("合肥市","hefei");
        City city4=new City("蚌埠市","bengbu");

        province2.addCity(city3);
        province2.addCity(city4);

        provinceList.add(province1);
        provinceList.add(province2);
        return provinceList;

    }

    /**
     * 无任何处理,得到的xml
     * <list>
     *   <cn.edu.stu.web.servlet.Province>
     *     <name>北京</name>
     *     <arrayList>
     *       <cn.edu.stu.web.servlet.City>
     *         <name>海淀区</name>
     *         <description>haidianQu</description>
     *       </cn.edu.stu.web.servlet.City>
     *       <cn.edu.stu.web.servlet.City>
     *         <name>西土城区</name>
     *         <description>xituchengQu</description>
     *       </cn.edu.stu.web.servlet.City>
     *     </arrayList>
     *   </cn.edu.stu.web.servlet.Province>
     *   <cn.edu.stu.web.servlet.Province>
     *     <name>安徽</name>
     *     <arrayList>
     *       <cn.edu.stu.web.servlet.City>
     *         <name>合肥市</name>
     *         <description>hefei</description>
     *       </cn.edu.stu.web.servlet.City>
     *       <cn.edu.stu.web.servlet.City>
     *         <name>蚌埠市</name>
     *         <description>bengbu</description>
     *       </cn.edu.stu.web.servlet.City>
     *     </arrayList>
     *   </cn.edu.stu.web.servlet.Province>
     * </list>
     */
    @Test
    public void func1(){

        //得到省份list
        List<Province>provinceList=getProvince();
        //创建XSTream对象
        XStream xStream=new XStream();
        //得到省份对象的xml
        String s=xStream.toXML(provinceList);
        System.out.println(s);


    }


    /**
     *
     * 将<list> 替换成<china>
     *  <cn.edu.stu.web.servlet.Province>替换成<province>
     *  <cn.edu.stu.web.servlet.City>替换成<city>
     *
     * <china>
     *   <province>
     *     <name>北京</name>
     *     <arrayList>
     *       <city>
     *         <name>海淀区</name>
     *         <description>haidianQu</description>
     *       </city>
     *       <city>
     *         <name>西土城区</name>
     *         <description>xituchengQu</description>
     *       </city>
     *     </arrayList>
     *   </province>
     *   <province>
     *     <name>安徽</name>
     *     <arrayList>
     *       <city>
     *         <name>合肥市</name>
     *         <description>hefei</description>
     *       </city>
     *       <city>
     *         <name>蚌埠市</name>
     *         <description>bengbu</description>
     *       </city>
     *     </arrayList>
     *   </province>
     * </china>
     */
    @Test
    public void func2(){

        //得到省份list
        List<Province>provinceList=getProvince();
        //创建XSTream对象
        XStream xStream=new XStream();

        //将生成的xml内容对应的标签替换别名
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);

        //得到省份对象的xml
        String s=xStream.toXML(provinceList);


        System.out.println(s);


    }


    /**
     * 隐藏掉省份中的城市集合属性
     *
     * <china>
     *   <province>
     *     <name>北京</name>
     *     <city>
     *       <name>海淀区</name>
     *       <description>haidianQu</description>
     *     </city>
     *     <city>
     *       <name>西土城区</name>
     *       <description>xituchengQu</description>
     *     </city>
     *   </province>
     *   <province>
     *     <name>安徽</name>
     *     <city>
     *       <name>合肥市</name>
     *       <description>hefei</description>
     *     </city>
     *     <city>
     *       <name>蚌埠市</name>
     *       <description>bengbu</description>
     *     </city>
     *   </province>
     * </china>
     */
    @Test
    public void func3(){

        //得到省份list
        List<Province>provinceList=getProvince();
        //创建XSTream对象
        XStream xStream=new XStream();

        //将生成的xml内容对应的标签替换别名
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);



        //隐藏掉省份中的城市集合属性
        xStream.addImplicitCollection(Province.class,"arrayList");

        //得到省份对象的xml
        String s=xStream.toXML(provinceList);


        System.out.println(s);


    }


    /**
     * 把province类的成员,变成province标签的属性
     * <china>
     *   <province name="北京">
     *     <city>
     *       <name>海淀区</name>
     *       <description>haidianQu</description>
     *     </city>
     *     <city>
     *       <name>西土城区</name>
     *       <description>xituchengQu</description>
     *     </city>
     *   </province>
     *   <province name="安徽">
     *     <city>
     *       <name>合肥市</name>
     *       <description>hefei</description>
     *     </city>
     *     <city>
     *       <name>蚌埠市</name>
     *       <description>bengbu</description>
     *     </city>
     *   </province>
     * </china>
     */
    @Test
    public void func4(){

        //得到省份list
        List<Province>provinceList=getProvince();
        //创建XSTream对象
        XStream xStream=new XStream();

        //将生成的xml内容对应的标签替换别名
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);

        //隐藏掉省份中的城市集合属性
        xStream.addImplicitCollection(Province.class,"arrayList");

        //把province类的成员,变成province标签的属性
        xStream.useAttributeFor(Province.class,"name");

        //得到省份对象的xml
        String s=xStream.toXML(provinceList);


        System.out.println(s);


    }


    /**
     *
     * 去掉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>
     */
    @Test
    public void func5(){

        //得到省份list
        List<Province>provinceList=getProvince();
        //创建XSTream对象
        XStream xStream=new XStream();

        //将生成的xml内容对应的标签替换别名
        xStream.alias("china",List.class);
        xStream.alias("province",Province.class);
        xStream.alias("city",City.class);

        //隐藏掉省份中的城市集合属性
        xStream.addImplicitCollection(Province.class,"arrayList");

        //把province类的成员,变成province标签的属性
        xStream.useAttributeFor(Province.class,"name");

        //去掉city中的description
        xStream.omitField(City.class,"description");
        //得到省份对象的xml
        String s=xStream.toXML(provinceList);


        System.out.println(s);


    }
}

猜你喜欢

转载自blog.csdn.net/SICAUliuy/article/details/89144122