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();
pr.setName("张三");
List<Freind> favs = new ArrayList<Freind>();
for(int i = ; i < ; 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></id>
<name>张三</name>
<fav>
<com.test.Freind>
<name>混混18</name>
<age></age>
</com.test.Freind>
<com.test.Freind>
<name>混混19</name>
<age></age>
</com.test.Freind>
</fav>
</com.test.Person>
-------------起别名后-----------------
<person>
<id></id>
<name>张三</name>
<fav>
<freind>
<name>混混18</name>
<age></age>
</freind>
<freind>
<name>混混19</name>
<age></age>
</freind>
</fav>
</person>
--------friend字段当属性处理---------
<person>
<id></id>
<name>张三</name>
<fav>
<freind name="混混18">
<age></age>
</freind>
<freind name="混混19">
<age></age>
</freind>
</fav>
</person>
-------------xml转java对象-----------------
Person [id=, name=张三, fav=[Freind [name=混混18, age=], Freind [name=混混19, age=]]]

java对象与xml相互转换 ---- xstream的更多相关文章

  1. 玩转Java对象和XML相互转换

    最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ...

  2. java对象与xml相互转换工具类

    public class XmlHelper { /** * Object转XML * * @param object * @return * @throws Exception */ public ...

  3. 使用XStream注解实现Java对象与XML互相转换的代码示例

    本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...

  4. JAVA对象和XML文档、原来他们之间还有这一出

    最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xm ...

  5. java socket报文通信(三)java对象和xml格式文件的相互转换

    前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...

  6. JSON对象与XML相互转换工具类

    依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...

  7. 通过JAXB完成Java对象与XML之间的转换

    Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...

  8. java对象与XML相互转化

    起因 最近在公司做了一次webservice相关的任务,其中我最敢兴趣的就是webservice接受到XML对应的流以后是如何方便的转化成java对象,而java对象又是如何生成对应的XML的. 目的 ...

  9. JAXB 实现java对象与xml之间互相转换

    首先熟悉一下JAXB实现对象与xml互转时常用的一些注解使用: 1.@XmlRootElement,用于类级别的注解,对应xml的跟元素.通过name属性定义这个根节点的名称. 2.@XmlAcces ...

随机推荐

  1. 关于 width;height

    IE Firefox Chrome Safari window(width|height)   no yes yes document.body document.documentElement 网页 ...

  2. scroller

    sh做的js控件. 另外内部被scroller包裹的div不可以定位成absolute,会撑不出高度. 上面只是使用的注意事项. 很佩服人家能封装出这样的控件. 如果我也能写得出来就能毕业了,也不用担 ...

  3. h.264 scanning process for transform coefficients

    宏块在经过变换.量化后,得到大小为4x4或者8x8的矩阵,矩阵中的数据被称为transform coefficient levels.这些level在后面会被用于熵编码,因此我们需要把矩阵按照一定顺序 ...

  4. MFC 仿QQ聊天软件(黄花寒)

    http://blog.csdn.net/lh844386434/article/details/6655080 http://download.csdn.net/download/lh8443864 ...

  5. HTML5区域范围文本框实例页面

    CSS代码: input { font-size: 14px; font-weight: bold; } input[type=range]:before { content: attr(min); ...

  6. Spring Batch系列总括(转载)

    最近一个项目在使用SpringBatch框架做一个电子商务平台的批处理.网上资料很有限,尤其是中文资料更是少之又少,官网上的文档也只是讲一些入门的基础知识,大部分高级特性都是一笔带过,讲解的很不彻底, ...

  7. mysql 累加排序求名次

    自己做的一个小项目里需要用mysql计算一些信息. mysql中的 表如下(注:表中数据都是测试数据,随机生成的) mysql> select * from shake_log; +-----+ ...

  8. bzoj2821

    其实和bzoj2724是一样的都是先处理多个块的答案,然后多余部分暴力空间要注意一下,还是O(nsqrt(n)); ..,..] of longint; g:..,..] of longint; a, ...

  9. BZOJ1610: [Usaco2008 Feb]Line连线游戏

    1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1301  Solved: 571[Submit ...

  10. Linux驱动的两种加载方式过程分析

    一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新 ...