XStream对象相当Java对象和XML之间的转换器,转换过程是双向的。创建XSteam对象的方式很简单,只需要newXStream()即可。
Java到xml,用toXML()方法。
Xml到Java,用fromXML()方法。

在没有任何默认配置的情况下,java到xml的映射,是java成员名对应xml的元素名,java类的全名对应xml根元素的名字。而实际中,往往是xml和java类都有了,要完成相互转换,必须进行别名映射。
别名配置包含三种情况:
1、类别名,用alias(Stringname,Classtype)。
2、类成员别名,用aliasField(Stringalias,ClassdefinedIn,StringfieldName)
3、类成员作为属性别名,用aliasAttribute(ClassdefinedIn,StringattributeName,Stringalias),单独命名没有意义,还要通过useAttributeFor(ClassdefinedIn,StringfieldName)应用到某个类上。

XStreamAnnotation

@XStreamAlias("AliasName"):usedtoaliasClassnameandfield

@XStreamAsAttribute():addattributeforClass

@XStreamImplicit()或者@XStreamImplicit(itemFieldName="Group")重新指定名字

XML解析器
1.XPP3(需要xpp3-[version].jar)
XStreamxstream=newXStream(newXppDriver());

2.JAXPDOM
XStreamxstream=newXStream(newDomDriver());不指定编码解析器

XStreamxstream=newXStream(newDomDriver(“UTF-8”));指定编码解析器

XStreamd的一些小bug

--在定义别名中的下划线“_”转换为xml后会变成“__”这个符号.因此,尽量避免在别名中实用任何符号,却是需要下划线的时候,可以考虑实用连接符“-”,这个没有问题。
--JavaBean中常常有一些常量,在转换过程,XStream也会将这些常量转换过去,形成常量的xml节点,这显然不是想要的结果,对于常量字段,就不做转换了。

PersonBean.java:

/***@author: chenyoulong *@Title:PersonBean.java*@date 2012-9-28 下午3:10:47 *@Description:TODO*/
package com.entity;import java.util.List;import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;/**<person><firstName>chen</firstName><lastName>youlong</lastName><telphone><code>137280</code><number>137280968</number></telphone><faxphone><code>20</code><number>020221327</number></faxphone><friends><name>A1</name><name>A2</name><name>A3</name></friends><pets><pet><name>doly</name><age>2</age></pet><pet><name>Ketty</name><age>2</age></pet></pets></person>**//*** @ClassName:PersonBean* @author: chenyoulong Email: chen.youlong@payeco.com* @date :2012-9-28 下午3:10:47* @Description:TODO*/
@XStreamAlias("person")
public class PersonBean {@XStreamAlias("firstName")private String firstName;@XStreamAlias("lastName")private String lastName;@XStreamAlias("telphone")private PhoneNumber tel;@XStreamAlias("faxphone")private PhoneNumber fax;// 测试一个标签下有多个同名标签@XStreamAlias("friends")private Friends friend;// 测试一个标签下循环对象@XStreamAlias("pets")private Pets pet;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public PhoneNumber getTel() {return tel;}public void setTel(PhoneNumber tel) {this.tel = tel;}public PhoneNumber getFax() {return fax;}public void setFax(PhoneNumber fax) {this.fax = fax;}public Friends getFriend() {return friend;}public void setFriend(Friends friend) {this.friend = friend;}public Pets getPet() {return pet;}public void setPet(Pets pet) {this.pet = pet;}@XStreamAlias("phoneNumber")public static class PhoneNumber {@XStreamAlias("code")private int code;@XStreamAlias("number")private String number;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}}/*** 用Xstream注解的方式实现:一个标签下有多个同名标签* * @ClassName:Friends* @author: chenyoulong Email: chen.youlong@payeco.com* @date :2012-9-28 下午4:32:24* @Description:TODO 5个name 中国,美国,俄罗斯,英国,法国*                   http://blog.csdn.net/menhuanxiyou*                   /article/details/5426765*/public static class Friends {@XStreamImplicit(itemFieldName = "name")// itemFieldName定义重复字段的名称,/** <friends> <friends> <name>A1</name> <String>A1</String>* <name>A2</name> 如果没有,则会变成 =====> <String>A1</String> <name>A3</name>* <String>A1</String> </friends> </friends>*/private List<String> name;public List<String> getName() {return name;}public void setName(List<String> name) {this.name = name;}}// 测试同一标签下循环某一对象public static class Animal {@XStreamAlias("name")private String name;@XStreamAlias("age")private int age;public Animal(String name, int age) {this.name = name;this.age = 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;}}/*** 测试同一标签下循环某一对象* * @ClassName:Pets* @author: chenyoulong Email: chen.youlong@payeco.com* @date :2012-9-28 下午6:26:01* @Description:TODO*/public static class Pets {@XStreamImplicit(itemFieldName = "pet")private List<Animal> animalList;public List<Animal> getAnimalList() {return animalList;}public void setAnimalList(List<Animal> animalList) {this.animalList = animalList;}}
}

PersonTest.java:

public class PersonTest {/*** @Title: main* @Description: TODO* @param args* @return void*/public static void main(String[] args) {// TODO Auto-generated method stub// toXml// String xmlStr=new PersonTest().toXml();// toBean// PersonBean per=new PersonTest().toBean();String xmlStr = "<person>" + "<firstName>chen</firstName>"+ "<lastName>youlong</lastName>" + "<telphone>"+ "<code>137280</code>" + "<number>137280968</number>"+ "</telphone>" + "<faxphone>" + "<code>20</code>"+ "<number>020221327</number>" + "</faxphone>" + "<friends>"+ "<name>A1</name>" + "<name>A2</name>" + "<name>A3</name>"+ "</friends>" + "<pets>" + "<pet>" + "<name>doly</name>"+ "<age>2</age>" + "</pet>" + "<pet>" + "<name>Ketty</name>"+ "<age>2</age>" + "</pet>" + "</pets>" + "</person>";PersonBean person = XmlUtil.toBean(xmlStr, PersonBean.class);System.out.println("person=firstname==" + person.getFirstName());System.out.println("person==Friends==name1=="+ person.getFriend().getName().get(0));System.out.println("person==Pets==name2=="+ person.getPet().getAnimalList().get(1).getName());}
}

转自:http://hi.baidu.com/readilychen/item/69ff3ab1b4d4df5f2aebe3e4

http://www.oschina.net/code/snippet_116183_14202

XStream---Java对象和XML之间的转换器相关推荐

  1. JAXB实现java对象与xml之间转换

    一.Jaxb处理java对象和xml之间转换常用的annotation有: 1. @XmlType 2. @XmlElement 3. @XmlRootElement 4. @XmlAttribute ...

  2. Java对象和XML之间的编排与反编排

    1 创建Java class 1.1 创建Classroom.jave(int id;int grade;String name) 1.2 创建Student.java(int id;String n ...

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

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

  4. jaxb java xml序列化_XML编程总结(六)——使用JAXB进行java对象和xml格式之间的相互转换...

    (六)使用JAXB进行java对象和xml格式之间的相互转换 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML ...

  5. java 转xml 变成两根下划线_XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个...

    使用XStream将java对象转换为xml时,需要对其中的一个字段加上CDATA,于是我自定义了一个XStream,主要代码如下:publicstaticXStreamcreateXstream() ...

  6. java对象转xml文件

    目录 前言: 正文: 技术:JAXB 步骤: 1.将所需要的xml按照层级结构创建相应的对象 2.对象中需要指定xml节点标签名,有两种方式: (1)第一种: (2)第二种: 3.使用方法: 4.PS ...

  7. 万能的java对象转xml算法

    前言 之前找了好多java对象转xml的代码,有的需要加注解很啰嗦,有的遇到结构复杂的对象就报错:没办法,只好自己研究了-- 说明 对象转xml的原理就在于分解对象的属性,如果遇到属性值是对象或数组, ...

  8. JavaXml教程(八)使用JDOM将Java对象转换为XML

    在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...

  9. 把Java对象转为xml格式

    1.在实体类上加@XmlRootElement注解 @XmlRootElement(name = "ROOT") //代表根标签 2.在对应的set方法上加 @XmlElement ...

最新文章

  1. ONAP — Overview
  2. Interview Q A 小明一家5口如何过桥
  3. 【MySQL性能优化】数据库设计三大范式(二)
  4. cocos2d-x学习笔记之图片分辨率适配
  5. Pandas 文件读取和导出
  6. 程序员面试金典——1.2原串翻转
  7. 解决谷歌浏览器添加插件时显示程序包无效:CRX_HEADER_INVALID
  8. 一句话解释新西兰技术移民
  9. jks文件转换keystore
  10. PPT制作技巧汇总之动画设置与播放(office 2007)
  11. 联想计算机的控制面板在哪,Win10创意者的控制面板在哪?
  12. 王者荣耀告诉你什么是节流
  13. CentOS7 查询版本/CPU/内存/硬盘容量等命令
  14. [Mac技巧]Mac下两款免费思维导图工具
  15. 【翻译】Matching Restaurant Menus to Crowdsourced Food Data【KDD 2017】
  16. 【华为机试真题Java】用连续自然数之和来表达整数
  17. HTML5 从入门到精通读书笔记
  18. YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
  19. 接口的基本语法与应用28,29
  20. NVIDIA英伟达jetson xavier nx官方套件刷机教程

热门文章

  1. React-Native入门(2)-简单阐述跳转
  2. LoadRunner使用odbc时报错can't get hostname for your address的解决方法
  3. C# devexpress gridcontrol 分页 控件制作
  4. Linux Redhat 6.4 LAMP 平台搭建
  5. MySql noinstall-5.1.34-win32 配置
  6. DataList和Repeater分页
  7. [ERROR] InnoDB: ibdata1 different size (rounded down to MB)
  8. ansible的lookup
  9. 利用opencv作透明重叠人群密度热度图
  10. Docker 集群环境实现的新方式