用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网摘 所属分类: 数据持久化、序列化 , WebService , Java

XStream 项目主页

http://xstream.codehaus.org/

需要 lib

xstream-1.2.2.jar
xpp3_min-1.1.3.4.O.jar

这是 2007.5.24 打包的 lib

测试主程序

package  org.stephencat.test;
import  com.thoughtworks.xstream. * ;
import  java.util. * ;

/**
 * 测试 XStream 序列化和反序列化
 *  @author  stephen.wjj
 *
  */
public   class  XStreamTest {
    
     /**
     * 测试序列化
      */
     public   static   void  TestSerializer(){
        System.out.println( " ===== Testing serializer ===== " );
        Person p1  =   new  Person();
        p1.setName( " AAA " );
        Person p2  =   new  Person();
        p2.setName( " BBB " );
        Person p3  =   new  Person();
        p3.setName( " CCC " );
        
        Group g  =   new  Group();
        g.getPersons().add(p1);
        g.getPersons().add(p2);
        g.getPersons().add(p3);
        g.setName( " KFC " );
        
        XStream xstream  =   new  XStream();
        
         //  声明标记名称对应的 Java 类
        xstream.alias( " group " , Group. class );
        xstream.alias( " person " , Person. class );
        
         //  把 Group 的 name 属性视为 XML 属性
        xstream.useAttributeFor(Group. class ,  " name " );
         //  忽略 XML 中的 <persons></persons> 标记
        xstream.addImplicitCollection(Group. class ,  " persons " );
        
        System.out.println(xstream.toXML(g));
    }
    
     /**
     * 测试反序列化
      */
     public   static   void  TestDeserializer(){
        System.out.println( " ===== Testing deserializer ===== " );
        String xml  =   " <group name=/ " KFC/ " ><person><name>AAA</name></person><person><name>BBB</name></person><person><name>CCC</name></person></group> " ;
        XStream xstream  =   new  XStream();
        
         //  声明标记名称对应的 Java 类
        xstream.alias( " group " , Group. class );
        xstream.alias( " person " , Person. class );
        
         //  把 Group 的 name 属性视为 XML 属性
        xstream.useAttributeFor(Group. class ,  " name " );
         //  忽略 XML 中的 <persons></persons> 标记
        xstream.addImplicitCollection(Group. class ,  " persons " );
        
        Group g  =  (Group) xstream.fromXML(xml);
        System.out.println( " Group name =  " + g.getName());
        System.out.println( " Group has persons =  " + g.getPersons().size());
        System.out.println( " Group persons: " );
         if (g.getPersons().size()  >   0 ){
            Iterator it  =  g.getPersons().iterator();
             while (it.hasNext()){
                Person p  =  (Person)it.next();
                 if (p != null ){
                    System.out.println(p.getName());
                } else {
                    System.out.println( " Err! person instance is null! " );
                }
            }
        }
    }

/**
     *  @param  args
      */
     public   static   void  main(String[] args) {
         //  TODO Auto-generated method stub
        TestSerializer();
        TestDeserializer();

}

}

Console 输出

=====  Testing serializer  =====
<group name = " KFC " >
  <person>
    <name>AAA</name>
  </person>
  <person>
    <name>BBB</name>
  </person>
  <person>
    <name>CCC</name>
  </person>
</group>
=====  Testing deserializer  =====
Group name  =  KFC
Group has persons  =   3
Group persons:
AAA
BBB
CCC

注:

用于反序列化的字符串(String xml = "...")中带有 XML 头部时不会影响结果

<? xml version="1.0" ?>

用于序列化的实体类

Group

package  org.stephencat.test;
import  java.util. * ;

/**
 * 包含若干 Person 的 Group 
 *  @author  stephen
 *
  */
public   class  Group {
    
     /**
     * Group名称<br>
     * 需求规定这是 XML 中的一个属性
      */
     private  String name;
     /**
     * 需求规定这是一堆若干数量的 person 标记
      */
     private  List persons  =   new  ArrayList();
    
     public  String getName() {
         return  name;
    }
     public   void  setName(String name) {
         this .name  =  name;
    }
     public  List getPersons() {
         return  persons;
    }
     public   void  setPersons(List persons) {
         this .persons  =  persons;
    }

}

Person

package  org.stephencat.test;

/**
 * Group 里面的 Person
 *  @author  stephen
 *
  */
public   class  Person {
    
     /**
     * 需求规定这是一个 name 标记
      */
     private  String name;

public  String getName() {
         return  name;
    }

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

}

用 XStream 序列化/反序列化 XML 为 Java 对象(实例)相关推荐

  1. 将Java对象序列化成XML格式,将XML反序列化还原为Java对象

    摘要:将Java对象序列化成XML格式,将XML反序列化还原为Java对象. 一:创建Maven工程,引入xstream依赖: <!--xstream--><dependency&g ...

  2. java xml amp_Javaamp;Xml教程(十一)JAXB实现XML与Java对象转换

    JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单 ...

  3. JavaXml教程(十一)JAXB实现XML与Java对象转换

    JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换. 本文以一个简单的例 ...

  4. 使用castor实现xml和java对象的转换

    对于xml和java对象的转换这里用castor进行转换,当然还有别的方式 方式一:castor和xml映射文件配合 首先提供需要解析的XML(内容不重要,重要的是格式) <?xml versi ...

  5. java非闭合xml转对象,不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

  6. xml与java对象互转

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

  7. digester java_[jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!)...

    # re: [jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!) 2009-11-09 10:27 | Java小子 楼主,运行起 ...

  8. 判断Java 对象实例是否死亡

    垃圾收集器与内存分配策略参考目录: 1.判断Java 对象实例是否死亡 2. Java 中的四种引用 3.垃圾收集算法 4. Java9中的GC 调优 5.内存分配与回收策略 在进入主题之前,我们要先 ...

  9. java对象实例_深入理解Java对象实例生成的例子!(转)

    深入理解Java对象实例生成的例子!(转)[@more@]代码如下: class A { public int Avar; public A() { System.out.println(" ...

最新文章

  1. Java 晋升必会的 70 道 「Spring 全家桶」高频面试题
  2. 0909 初识操作系统
  3. 第19讲:Pyppeteer 爬取实战
  4. no amd graphics driver怎么解决_《英雄联盟手游》卡顿怎么解决 游戏设置优化教程...
  5. visual studio for mac的离线安装初体验
  6. 微模式重金招聘高级图像算法工程师
  7. Android 切换卡(TabWidget)
  8. 写给自己,梳理一下我现在对前端知识结构的理解
  9. python21天打卡Day12--for循环,列表推导式-构建列表
  10. html在线编辑器 哪个好用,可视化HTML富文本编辑器有哪些?哪个好用?
  11. laypage分页java例子_layPage分页示例
  12. Socket(服务器端)通信连接失败解决方法
  13. SAS笔记#通过TABULATE过程制作汇总报表
  14. linux分区拓展容量,Linux系统分区容量扩充的方法
  15. wps插入C/C++代码
  16. 电流互感器的一些计算
  17. denoiser降噪实例
  18. 关于 watched variable changed 异常的详解
  19. (科软)高级软件工程课程总结
  20. [激光原理与应用-65]:激光器-器件 - 多模光纤(宽频光纤)、单模光纤的原理与区别

热门文章

  1. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码
  2. 【PHPWord】TextRun
  3. mysql 添加table_mysql数据库对table的增删改查
  4. python输入列表方法_Python用input输入列表的方法
  5. 基于ip地址的客户识别原理_使用 LVS 实现负载均衡原理及安装配置
  6. linux php7扩展查看,linux安装PHP7以及扩展
  7. python分类流程_文本分类指南:你真的要错过 Python 吗?
  8. mqttjar包_GitHub - a-voyager/MqttLib: Mqtt 通信封装库.
  9. 第二周Access总结
  10. Delphi 2010 secondsBetween Bug