java+xstream实现xml序列化(XStream轻松转换xml和java对象)

首先引入所需的jar:

xstream-1.4.9、xpp3_min-1.1.4c、dom4j-1.6.1,

或用maven管理jar包时在pom.xml中添加:

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->  
<dependency>  
    <groupId>com.thoughtworks.xstream</groupId>  
    <artifactId>xstream</artifactId>  
    <version>1.4.9</version>  
</dependency>  
<!-- https://mvnrepository.com/artifact/xpp3/xpp3_min -->  
<dependency>  
    <groupId>xpp3</groupId>  
    <artifactId>xpp3_min</artifactId>  
    <version>1.1.4c</version>  
</dependency>  
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->  
<dependency>  
    <groupId>dom4j</groupId>  
    <artifactId>dom4j</artifactId>  
    <version>1.6.1</version>  
</dependency>  
实体类如下:

package com.cn.entity;  
  
public class Address {  
  
    //国  
    private String country;  
    //省  
    private String province;  
    //市  
    private String city;  
    //县  
    private String county;  
    //镇  
    private String town;  
      
    get...  
    set...  
}  
<pre name="code" class="java">package com.cn.entity;  
  
import java.util.List;  
  
public class Person {  
  
    //姓名  
    private String name;  
    //性别  
    private String sex;  
    //年龄  
    private int age;  
    //地址  
    private List<Address> Address;  
      
    get...  
    set...  
}  
XStream工具类:

package com.cn.util;  
  
import com.cn.entity.Address;  
import com.cn.entity.Person;  
import com.thoughtworks.xstream.XStream;  
import com.thoughtworks.xstream.io.xml.DomDriver;  
/** 
 * XStream工具类 
 * @author sun.kai 
 * 2016年8月13日 
 */  
public class XStreamUtil {  
  
    private static XStream xStream;  
      
    //JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。  
    static{  
        xStream = new XStream(new DomDriver());  
        /* 
         * 使用xStream.alias(String name, Class Type)为任何一个自定义类创建到类到元素的别名 
         * 如果不使用别名,则生成的标签名为类全名 
         */  
        xStream.alias("person", Person.class);  
        xStream.alias("address", Address.class);  
        //将某一个类的属性,作为xml头信息的属性,而不是子节点  
        xStream.useAttributeFor(Address.class, "country");  
        //对属性取别名  
        xStream.aliasField("省", Address.class,"province");  
    }  
      
    //xml转java对象  
    public static Object xmlToBean(String xml){  
        return xStream.fromXML(xml);  
    }  
      
    //java对象转xml  
    public static String beanToXml(Object obj){  
        return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xStream.toXML(obj);  
    }  
} 
测试用例:

package com.test.test;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import com.cn.entity.Address;  
import com.cn.entity.Person;  
import com.cn.util.XStreamUtil;  
  
public class TestXStream {  
  
    public static void main(String[] args) {  
        long time1  = System.currentTimeMillis();  
        //测试java对象转xml,java对象中包含集合对象  
        Person person = new Person();  
        person.setName("admin管理员");  
        person.setSex("男");  
        person.setAge(25);  
        List<Address> adds = new ArrayList<Address>();  
        Address address1 = new Address();  
        address1.setCountry("中国");  
        address1.setProvince("安徽");  
        address1.setCity("宿州");  
        address1.setCounty("萧县");  
        Address address2 = new Address();  
        address2.setCountry("中国");  
        address2.setProvince("上海");  
        address2.setCity(null);  
        address2.setCounty("");  
        adds.add(address1);  
        adds.add(address2);  
        person.setAddress(adds);  
        String xml = XStreamUtil.beanToXml(person);  
        System.out.println(xml);  
          
        //测试xml转java对象  
        Person person2 = (Person) XStreamUtil.xmlToBean(xml);  
        System.out.println(person2.getAddress().get(1).getProvince());  
          
        long time2 = System.currentTimeMillis();  
        System.out.println((time2-time1)+"ms");  
    }  
}  
执行后控制台打印:

<?xml version="1.0" encoding="UTF-8"?>  
<person>  
  <name>admin管理员</name>  
  <sex>男</sex>  
  <age>25</age>  
  <Address>  
    <address country="中国">  
      <省>安徽</省>  
      <city>宿州</city>  
      <county>萧县</county>  
    </address>  
    <address country="中国">  
      <省>上海</省>  
      <county></county>  
    </address>  
  </Address>  
</person>  
上海  
669ms  

总结:

   (1) XStream是一个可以将javaBean与XML双向转换的Java类库。

   (2) Java到xml,使用toXML()方法;xml到Java,用fromXML()方法。

   (3) 类别名,用alias(String name, Class type)。

   (4) 类成员别名,用aliasField(String alias, Class definedIn, String fieldName)。

   (5) 将某一个类的属性,作为xml头信息的属性,而不是子节点,用useAttributeFor(Class definedIn, String fieldName)。

   (5) 类成员作为属性别名,用 aliasAttribute(Class definedIn, String attributeName, String alias),单独命名没有意义,还要通过useAttributeFor(Class definedIn, String fieldName) 应用到某个类上。

   (6) XStream默认当String类型的属性值为null时不封装到xml中。可以根据实际传xml情况,选择对象属性set空字符串还是null。








  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springmvc4.3.3和mybatis3.4.1集成最新全部jar包,还包含了其他一些常用的jar包,很全,已经在项目中验证过。 lib/antlr-2.7.2.jar lib/aopalliance-1.0.jar lib/asm-3.3.1.jar lib/aspectjweaver-1.6.5.jar lib/axis-1.4.jar lib/axis-jaxrpc-1.4.jar lib/axis-saaj-1.4.jar lib/axis-wsdl4j-1.5.1.jar lib/cglib-2.2.2.jar lib/com.springsource.javax.xml.rpc-1.1.0.v20110517.jar lib/commons-chain-1.2.jar lib/commons-dbcp-1.4.jar lib/commons-pool-1.5.4.jar lib/gson-2.1.jar lib/hessian-4.0.7.jar lib/hsqldb-1.8.0.10.jar lib/ibatis-sqlmap-2.3.4.726.jar lib/jackson-all-1.9.9.jar lib/javax.inject.jar lib/javax.wsdl-1.6.1.jar lib/jettison-1.1.jar lib/json-lib-2.4-jdk15.jar lib/jstl-1.2.jar lib/jxl.jar lib/oro-2.0.8.jar lib/servlet-api.jar lib/tiles-api-2.2.0.jar lib/tiles-core-2.2.0.jar lib/tiles-jsp-2.2.0.jar lib/tiles-servlet-2.2.0.jar lib/tiles-template-2.2.0.jar lib/urlrewritefilter-3.1.0.jar lib/xpp3_min-1.1.4c.jar lib/xstream-1.3.jar lib/activation.jar lib/commons-collections-3.2.1.jar lib/dom4j-1.6.1.jar lib/ezmorph-1.0.2.jar lib/mail.jar lib/stax-api-1.0.1.jar lib/xmlbeans-2.3.0.jar lib/bouncycastle.jar lib/commons-codec-1.10.jar lib/httpclient-4.2.3.jar lib/httpclient-cache-4.2.3.jar lib/httpcore-4.2.2.jar lib/standard-1.1.2.jar lib/pinyin4j-2.5.0.jar lib/log4j-1.2.17.jar lib/jsqlparser-0.9.5.jar lib/kaptcha-2.3.2.jar lib/pagehelper-4.1.6.jar lib/log4j-api-2.3.jar lib/log4j-core-2.3.jar lib/mybatis-3.4.1.jar lib/slf4j-api-1.7.21.jar lib/slf4j-log4j12-1.7.21.jar lib/mybatis-ehcache-1.0.3.jar lib/mybatis-spring-1.3.0.jar lib/spring-aop-4.3.3.RELEASE.jar lib/spring-aspects-4.3.3.RELEASE.jar lib/spring-beans-4.3.3.RELEASE.jar lib/spring-context-4.3.3.RELEASE.jar lib/spring-context-support-4.3.3.RELEASE.jar lib/spring-core-4.3.3.RELEASE.jar lib/spring-expression-4.3.3.RELEASE.jar lib/spring-instrument-4.3.3.RELEASE.jar lib/spring-instrument-tomcat-4.3.3.RELEASE.jar lib/spring-jdbc-4.3.3.RELEASE.jar lib/spring-jms-4.3.3.RELEASE.jar lib/spring-messaging-4.3.3.RELEASE.jar lib/spring-orm-4.3.3.RELEASE.jar lib/spring-oxm-4.3.3.RELEASE.jar lib/spring-test-4.3.3.RELEASE.jar lib/spring-tx-4.3.3.RELEASE.jar lib/spring-web-4.3.3.RELEASE.jar lib/spring-webmvc-4.3.3.RELEASE.jar lib/spring-webmvc-portlet-4.3.3.RELEASE.jar lib/spring-websocket-4.3.3.RELEASE.jar lib/commons-beanutils-1.9.2.jar lib/commons-discovery-0.5.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.2.jar lib/druid-1.0.9.jar lib/ehcache-core-2.6.10.jar lib/freemarker-2.3.8.jar lib/mysql-connector-java-5.1.34.jar lib/struts2-core-2.0.11.jar lib/poi-3.11-20141221.jar lib/poi-excelant-3.11-20141221.jar lib/poi-ooxml-3.11-20141221.jar lib/poi-ooxml-schemas-3.11-20141221.jar lib/poi-scratchpad-3.11-20141221.jar lib/sqljdbc4.jar lib/ueditor.jar lib/commons-fileupload-1.3.2.jar lib/commons-io-2.5.jar lib/commons-lang-2.6.jar lib/commons-validator-1.5.1.jar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值