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. 【LA2796】Concert Hall Scheduling(最大费用最大流)

    Description You are appointed director of a famous concert hall, to save it from bankruptcy. The hal ...

  2. 注意android裁图的Intent action

    现在很多开发者在裁图的时候还是使用com.android.camera.action.CROP 来调用 startActivity(). 这不是个好主意. 任何不是依android开头的Action ...

  3. 【POJ】1451 T9

    DFS+字典树. #include <cstdio> #include <cstring> #include <cstdlib> typedef struct Tr ...

  4. (转)java多线程的一篇好文

    云转型基石ThinkServer特性解析 2013-05-29 10:47 佚名 importnew 字号:T | T 本文只是一些针对初学者或者新手的问题,如果你已经具备良好的基础,那么你可以跳过本 ...

  5. Spark SQL编程指南(Python)

    前言   Spark SQL允许我们在Spark环境中使用SQL或者Hive SQL执行关系型查询.它的核心是一个特殊类型的Spark RDD:SchemaRDD.   SchemaRDD类似于传统关 ...

  6. Apache Mesos_百度百科

    Apache Mesos_百度百科 Apache Mesos

  7. 找出Active Directory架构操作主机方法!

  8. c#基础语言编程-异常处理

    异常的定义 异常就是程序中的运行时错误,当出现异常时,系统会捕获这个错误并抛出一个异常.若程序没有提供处理该异常的代码,系统会挂起这个程序. 常见异常的类型 System.Exception 最泛化的 ...

  9. [置顶] UITableViewCell

    UITableViewCellStyle: 四种Cell类型. UITableViewCellSeparatorStyle 分割线类型.(group三种,plain两种) UITableViewCel ...

  10. 【Android - 框架】之ORMLite的使用

    Android中有很多操作SQLite数据库的框架,现在最常见.最常用的是ORMLite和GreenDAO.ORMLite相比与GreenDAO来说是一个轻量级的框架,而且学习成本相对较低.所以这个帖 ...