• java对象与xml相互转换 ---- xstream


    XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。

    XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用了。

    由于XStream.jar依赖于xmlpull.jar 所以,需将这两个jar一同导入。

    下载地址 : https://pan.baidu.com/s/1eSpZs3o#path=%252F%25E5%25B7%25A5%25E5%2585%25B7jar

    XStream对象相当Java对象和XML之间的转换器,转换过程是双向的。创建XSteam对象的方式很简单,只需要new XStream()即可。
    Java到xml,用toXML()方法。
    Xml到Java,用fromXML()方法。
     
    别名配置包含三种情况:
    1、类别名,用alias(String name, Class type)
    2、类成员别名,用aliasField(String alias, Class definedIn, String fieldName)
    3、类成员作为属性别名,用 aliasAttribute(Class definedIn, String attributeName, String alias),单独命名没有意义,还要通过useAttributeFor(Class definedIn, String fieldName) 应用到某个类上。
    别名的配置是非常重要的,但是其中有些细节问题很重要。
     
    简单举例如下 :
     
    普通java对象 :
    package com.test;
    
    public class Freind {
    
        private String name;
        
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Freind [name=" + name + ", age=" + age + "]";
        }
        
        
    }
    package com.test;
    
    import java.util.List;
    
    public class Person {
    
        private int id;
        
        private String name;
        
        private List<Freind> fav;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public List<Freind> getFav() {
            return fav;
        }
    
        public void setFav(List<Freind> fav) {
            this.fav = fav;
        }
    
        @Override
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", fav=" + fav + "]";
        }
        
        
    }

    测试类 :

    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.commons.io.FileUtils;
    
    import com.test.Freind;
    import com.test.Person;
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    
    
    public class XstreamTest {
    
        public static void main(String[] args) throws IOException {
            XStream stream = new XStream(new DomDriver());
            Person pr = new Person();
            
            pr.setId(1);
            pr.setName("张三");
            List<Freind> favs = new ArrayList<Freind>();
            for(int i = 18; i < 20; i++) {
                Freind fd = new Freind();
                fd.setAge(i);
                fd.setName("混混" + i);
                favs.add(fd);
            }
            pr.setFav(favs);
            
            System.out.println("-------------起别名前-----------------");
            System.out.println(stream.toXML(pr));
            System.out.println("-------------起别名后-----------------");
            //类起别名
            stream.alias("person", pr.getClass());
            stream.alias("freind", Freind.class);
            
            System.out.println(stream.toXML(pr));
            
            System.out.println("--------friend字段当属性处理---------");
            //字段“name”当属性处理
            stream.useAttributeFor(Freind.class, "name");
            System.out.println(stream.toXML(pr));
            
            System.out.println("-------------xml转java对象-----------------");
            
            Person result = (Person) stream.fromXML(stream.toXML(pr));
            System.out.println(result.toString());
        }
    }

    输出结果 :

    -------------起别名前-----------------
    <com.test.Person>
      <id>1</id>
      <name>张三</name>
      <fav>
        <com.test.Freind>
          <name>混混18</name>
          <age>18</age>
        </com.test.Freind>
        <com.test.Freind>
          <name>混混19</name>
          <age>19</age>
        </com.test.Freind>
      </fav>
    </com.test.Person>
    -------------起别名后-----------------
    <person>
      <id>1</id>
      <name>张三</name>
      <fav>
        <freind>
          <name>混混18</name>
          <age>18</age>
        </freind>
        <freind>
          <name>混混19</name>
          <age>19</age>
        </freind>
      </fav>
    </person>
    --------friend字段当属性处理---------
    <person>
      <id>1</id>
      <name>张三</name>
      <fav>
        <freind name="混混18">
          <age>18</age>
        </freind>
        <freind name="混混19">
          <age>19</age>
        </freind>
      </fav>
    </person>
    -------------xml转java对象-----------------
    Person [id=1, name=张三, fav=[Freind [name=混混18, age=18], Freind [name=混混19, age=19]]]
  • 相关阅读:
    Objective C 绘制透明窗口的方法
    在挂载的 NTFS 盘上运行 gdb 会遇到权限问题,导致无法初始化
    使用 Eclipse 打造 操作系统实习 JOS 开发环境
    C# URL 中文编码与解码
    突破教育网的防线,将搜狗浏览器的教育网加速功能全面推向各种浏览器
    linux 截屏工具
    yum install 时 提示某个已安装的库(x86_64)比某个要安装的库(i686) 新导致安装失败
    全方位打造 Eclipse 自定义开发环境
    自动售饮料机的verilog实现
    数字跑表的verilog实现
  • 原文地址:https://www.cnblogs.com/yinz/p/5413492.html
Copyright © 2020-2023  润新知