XStream 概述

     XStream 是一套简洁易用的开发类库,用于将Java对象序列化为XML或者将XML反序列化为JAVA对象,是JAVA对象和XML之间一个双向转换器。

举例

    采用User用户对象和LoginLog登录日志对象作为XStream实例转换对象. 例子简单,直接贴代码了.
       User.java 
       
  1. package com.baobaotao.domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.Map;
  8.  
  9. public class User implements Serializable {
  10. private int userId;
  11. private String userName;
  12. private String password;
  13. private int credits;
  14. private String lastIp;
  15. private Date lastVisit;
  16. private List logs;
  17. private Map datas;
  18.  
  19. public List<LoginLog> getLogs() {
  20. return logs;
  21. }
  22. public void setLogs(List logs) {
  23. this.logs = logs;
  24. }
  25. public int getUserId() {
  26. return userId;
  27. }
  28. public void setUserId(int userId) {
  29. this.userId = userId;
  30. }
  31. public String getUserName() {
  32. return userName;
  33. }
  34. public void setUserName(String userName) {
  35. this.userName = userName;
  36. }
  37. public String getPassword() {
  38. return password;
  39. }
  40. public void setPassword(String password) {
  41. this.password = password;
  42. }
  43. public int getCredits() {
  44. return credits;
  45. }
  46. public void setCredits(int credits) {
  47. this.credits = credits;
  48. }
  49. public String getLastIp() {
  50. return lastIp;
  51. }
  52. public void setLastIp(String lastIp) {
  53. this.lastIp = lastIp;
  54. }
  55. public Date getLastVisit() {
  56. return lastVisit;
  57. }
  58. public void setLastVisit(Date lastVisit) {
  59. this.lastVisit = lastVisit;
  60. }
  61.  
  62. public void addLoginLog(LoginLog log){
  63. if(this.logs==null){
  64. logs = new ArrayList<LoginLog>();
  65. }
  66. logs.add(log);
  67. }
  68.  
  69. public Map getDatas() {
  70. return datas;
  71.  
  72. }
  73. public void setDatas(Map datas) {
  74. this.datas = datas;
  75. }
  76.  
  77. }

LoginLog.java

  1. package com.baobaotao.domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Date;
  5.  
  6. public class LoginLog implements Serializable {
  7. private int loginLogId;
  8. private int userId;
  9. private String ip;
  10. private Date loginDate;
  11.  
  12. public int getLoginLogId() {
  13. return loginLogId;
  14. }
  15. public void setLoginLogId(int loginLogId) {
  16. this.loginLogId = loginLogId;
  17. }
  18. public int getUserId() {
  19. return userId;
  20. }
  21. public void setUserId(int userId) {
  22. this.userId = userId;
  23. }
  24. public String getIp() {
  25. return ip;
  26. }
  27. public void setIp(String ip) {
  28. this.ip = ip;
  29. }
  30. public Date getLoginDate() {
  31. return loginDate;
  32. }
  33. public void setLoginDate(Date loginDate) {
  34. this.loginDate = loginDate;
  35. }
  36.  
  37. }

下面就开始使用XStream进行对象与 XML之间的转换.

  1. package com.baobaotao.oxm.xtream;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.Date;
  6.  
  7. import com.baobaotao.domain.LoginLog;
  8. import com.baobaotao.domain.User;
  9. import com.thoughtworks.xstream.XStream;
  10. import com.thoughtworks.xstream.io.xml.DomDriver;
  11.  
  12. public class XStreamSample {
  13.  
  14. private static XStream xstream;
  15. static{
  16. //创建XStream实例并指定一个XML 解析器
  17. xstream=new XStream(new DomDriver());
  18. }
  19.  
  20. //初始化转换对象
  21. public static User getUser(){
  22. LoginLog log1=new LoginLog();
  23. log1.setIp("192.168.1.91");
  24. log1.setLoginDate(new Date());
  25.  
  26. User user=new User();
  27. user.setUserId(1);
  28. user.setUserName("xstream");
  29. user.addLoginLog(log1);
  30.  
  31. return user;
  32. }
  33.  
  34. //Java 对象转换成XML
  35. public static void objectToXML() throws Exception{
  36.  
  37. //获取转换User对象的实例
  38. User user=getUser();
  39. //实例化一个文件输出流
  40. FileOutputStream fileOutputStream=new FileOutputStream("XStreamSample.xml");
  41.  
  42. //将User对象转换为XML,并保存到指定文件
  43. xstream.toXML(user,fileOutputStream);
  44. }
  45.  
  46. //XML转换为Java对象
  47. public static User XMLToObject() throws Exception{
  48. //实例化一个文件输入流
  49. FileInputStream inputStream=new FileInputStream("XStreamSample.xml");
  50. //将XML文件输入流转化为对象
  51. User user=(User) xstream.fromXML(inputStream);
  52.  
  53. for(LoginLog log :user.getLogs()){
  54. if(log!=null){
  55. System.out.println("访问IP:"+log.getIp());
  56. }
  57. }
  58. }
  59.  
  60. }

编写测试类

  1. package com.baobaotao.oxm.xstream;
  2.  
  3. import static org.junit.Assert.assertEquals;
  4. import static org.junit.Assert.assertNotNull;
  5.  
  6. import java.io.BufferedReader;
  7. import java.io.FileReader;
  8.  
  9. import org.junit.Test;
  10.  
  11. import com.baobaotao.domain.LoginLog;
  12. import com.baobaotao.domain.User;
  13. import com.baobaotao.oxm.xtream.XStreamSample;
  14.  
  15. public class TestXStreamSample {
  16.  
  17. @Test
  18. public void objectToXml()throws Exception {
  19. XStreamSample.objectToXML();
  20. FileReader reader = new FileReader("XStreamSample.xml");
  21. BufferedReader br = new BufferedReader(reader);
  22. StringBuffer sb = new StringBuffer("");
  23. String s;
  24. while ((s = br.readLine()) != null) {
  25. sb.append(s);
  26. }
  27. System.out.println(sb.toString());
  28. reader.close();
  29. br.close();
  30. // assertXpathExists("//com.baobaotao.domain.User",sb.toString());
  31. // assertXpathExists("//credits",sb.toString());
  32. // assertXpathExists("//userName",sb.toString());
  33. // assertXpathExists("//com.baobaotao.domain.LoginLog",sb.toString());
  34. }
  35.  
  36. @Test
  37. public void xmlToObject()throws Exception {
  38. XStreamSample.objectToXML();
  39. User u = XStreamSample.XMLToObject();
  40. assertNotNull(u);
  41. assertEquals("xstream", u.getUserName());
  42. for (LoginLog log : u.getLogs()) {
  43. assertNotNull(log);
  44. assertNotNull(log.getIp());
  45. assertNotNull(log.getLoginDate());
  46. }
  47.  
  48. }
  49. }

生成的XML文件如下:

  1. <com.baobaotao.domain.User>
  2. <userId>1</userId>
  3. <userName>xstream</userName>
  4. <credits>0</credits>
  5. <logs>
  6. <com.baobaotao.domain.LoginLog>
  7. <loginLogId>0</loginLogId>
  8. <userId>0</userId>
  9. <ip>192.168.1.91</ip>
  10. <loginDate>2015-03-25 07:44:05.783 UTC</loginDate>
  11. </com.baobaotao.domain.LoginLog>
  12. </logs>
  13. </com.baobaotao.domain.User>

使用XStream 别名

        在默认情况下,Java对象映射到XML的映射,是Java对象属性名对应XML的元素名,Java类的全名对应XML根元素的名字。在实际的应用中,如果XML和Java类都已经存在相应的名字,在进行转换时,需要设置别名进行映射。
        XStream别名配置包含三种情况:
        类别名,用alias(String name ,Class type);
        类成员别名,用aliasField(String alias,Class definedIn,String fieldName);yo
        类成员作为属性别名,用aliasAttribute(Class definedIn,String attributeName,String alias)  ,单独命名没有意义,还要通过useAttributeFor(Class definedIn,String fieldName) 应用到某个类上。


    
  1. package com.baobaotao.oxm.xtream.alias;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.Date;
  6.  
  7. import com.baobaotao.domain.LoginLog;
  8. import com.baobaotao.domain.User;
  9. import com.thoughtworks.xstream.XStream;
  10. import com.thoughtworks.xstream.io.xml.DomDriver;
  11.  
  12. /**
  13. * 别名
  14. * @author yulei
  15. */
  16. public class XStreamAliasSample {
  17. private static XStream xstream;
  18. static {
  19. xstream=new XStream(new DomDriver());
  20. //设置类别名,默认为当前类名称加上包名
  21. xstream.alias("loginLog", LoginLog.class);
  22. xstream.alias("user", User.class);
  23.  
  24. //设置类成员别名
  25. xstream.aliasField("id", User.class, "userId");
  26. //把LoginLog的userId属性视为XML属性,默认为XML的元素
  27. xstream.aliasAttribute(LoginLog.class, "userId","id");
  28. xstream.useAttributeFor(LoginLog.class, "userId");
  29.  
  30. //去掉集合类型生成XML的父节点,即忽略XML中的<logs></logs>标记
  31. xstream.addImplicitCollection(User.class,"logs");
  32.  
  33. }
  34.  
  35. //初始化转换对象
  36. public static User getUser(){
  37. LoginLog log1=new LoginLog();
  38. log1.setIp("192.168.1.91");
  39. log1.setLoginDate(new Date());
  40.  
  41. User user=new User();
  42. user.setUserId(1);
  43. user.setUserName("xstream");
  44. user.addLoginLog(log1);
  45.  
  46. return user;
  47. }
  48.  
  49. //Java 对象转换成XML
  50. public static void objectToXML() throws Exception{
  51.  
  52. //获取转换User对象的实例
  53. User user=getUser();
  54. //实例化一个文件输出流
  55. FileOutputStream fileOutputStream=new FileOutputStream("XStreamSample.xml");
  56.  
  57. //将User对象转换为XML,并保存到指定文件
  58. xstream.toXML(user,fileOutputStream);
  59. }
  60.  
  61. //XML转换为Java对象
  62. public static User XMLToObject() throws Exception{
  63. //实例化一个文件输入流
  64. FileInputStream inputStream=new FileInputStream("XStreamSample.xml");
  65. //将XML文件输入流转化为对象
  66. User user=(User) xstream.fromXML(inputStream);
  67.  
  68. for(LoginLog log :user.getLogs()){
  69. if(log!=null){
  70. System.out.println("访问IP:"+log.getIp());
  71. }
  72. }
  73. return user;
  74. }
  75.  
  76. }





XML 处理利器 : XStream的更多相关文章

  1. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  2. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  3. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  4. android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

  6. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  7. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

  8. 微信开发,对象转换为xml时候引用XStream这个类报错处理方案

    报错的信息为:The type org.xmlpull.v1.XmlPullParser cannot be resolved. /**  * 扩展XStream 支持CDATA  */ privat ...

  9. JAVA bean与XML互转的利器---XStream

    最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...

随机推荐

  1. Java第10次实验(数据库)

    参考资料 数据结构实验参考文件 MySql操作视频与数据库相关jar文件请参考QQ群文件. 第1次实验 1. MySQL数据库基本操作 完整演示一遍登录.打开数据库.建表.插入 常见错误:语句后未跟; ...

  2. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  3. PHP+MySQL 分页那点事

    分页技术随处可见,这可以算得上是最为基础的网站功能了.于是今天尝试着用PHP来实现一个分页的小例子. 准备工作 环境准备 Apache MySQL PHP 工作环境 数据库准备 建库 建表 预存数据 ...

  4. MyEclipse如何全局搜索

    1全局搜索的启动方式 CTRL+H 2全局搜索自己选择搜索方式 自己选择要搜索的东西,简单吧,里面还有很多好玩的东西需要你去发现,加油! [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之 ...

  5. 计算机网络中的TCP/IP模型

    Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Inter ...

  6. [django]用fastcgi部署

    django官方已经开始弃用fastcgi来部署django应用了,作为以前使用过的用户,还是贴一个配置,用来做纪念吧.. 项目下 #! /bin/sh case "$@" in ...

  7. Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629449 前言:上篇文中分析 ...

  8. JQuery 网页选项卡制作

    网页选项卡可以较好的利用有限的页面来展示更多的元素,而使用JQuery来制作网页选项卡也是一件非常简单的事情.今天就来分享一个网页选项卡的制作小技巧. 引入所需库 选项卡原理 业务核心 完整小例子 引 ...

  9. shell test和find命令实例解析

    shell test和find命令实例解析 下面以\build\core\product.mk相关部分来学习 define _find-android-products-files $(shell t ...

  10. Dynamics CRM Trace Reader for Microsoft Dynamics CRM

    CRM中抓取日志的视窗工作叫做Diagnastics Tools For Dyanmics CRM,这个工具我们只是作为一个开关来用就不做多介绍了,日志生成后是个文本文档可读性是很差的,那就需要个视窗 ...