1.引入需要的jar包,在pom.xml中配置依赖

  1. <dependency>
  2. <groupId>com.thoughtworks.xstream</groupId>
  3. <artifactId>xstream</artifactId>
  4. <version>1.4.2</version>
  5. </dependency>

2.创建要转换的实例类,本文以简单的硬件信息为例

  1. package com.ajita.xstream;
  2. import com.thoughtworks.xstream.annotations.XStreamAlias;
  3. import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
  4. @XStreamAlias("DiskInfo")
  5. public class DiskInfo {
  6. @XStreamAsAttribute
  7. @XStreamAlias("diskName")
  8. private String name;
  9. private int totalSize;
  10. private int avilableSize;
  11. private int usedSize;
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public int getTotleSize() {
  19. return totalSize;
  20. }
  21. public void setTotleSize(int totleSize) {
  22. this.totalSize = totleSize;
  23. }
  24. public int getAvilableSize() {
  25. return avilableSize;
  26. }
  27. public void setAvilableSize(int avilableSize) {
  28. this.avilableSize = avilableSize;
  29. }
  30. public int getUserSize() {
  31. return usedSize;
  32. }
  33. public void setUserSize(int userSize) {
  34. this.usedSize = userSize;
  35. }
  36. public String toString() {
  37. StringBuilder sb = new StringBuilder();
  38. sb.append(name + "\r\n");
  39. sb.append("TotalSize:" + totalSize + "|Used Size:" + usedSize
  40. + "|Available Size:" + avilableSize);
  41. return sb.toString();
  42. }
  43. }
  44. package com.ajita.xstream;
  45. import java.util.List;
  46. import com.thoughtworks.xstream.annotations.XStreamAlias;
  47. @XStreamAlias("HardwareInfo")
  48. public class HardwareInfo {
  49. private String cpuInfo;
  50. private String networkInfo;
  51. private List<DiskInfo> diskInfos;
  52. public String getCpuInfo() {
  53. return cpuInfo;
  54. }
  55. public void setCpuInfo(String cpuInfo) {
  56. this.cpuInfo = cpuInfo;
  57. }
  58. public String getNetworkInfo() {
  59. return networkInfo;
  60. }
  61. public void setNetworkInfo(String networkInfo) {
  62. this.networkInfo = networkInfo;
  63. }
  64. public List<DiskInfo> getDiskInfos() {
  65. return diskInfos;
  66. }
  67. public void setDiskInfos(List<DiskInfo> diskInfos) {
  68. this.diskInfos = diskInfos;
  69. }
  70. public String toString() {
  71. StringBuilder sb = new StringBuilder();
  72. sb.append(cpuInfo);
  73. sb.append("\r\n");
  74. sb.append(networkInfo);
  75. sb.append("\r\n");
  76. for (DiskInfo disk : diskInfos) {
  77. sb.append(disk.toString());
  78. sb.append("\r\n");
  79. }
  80. return sb.toString();
  81. }
  82. }

3.新建测试代码

  1. package com.ajita.xstream;
  2. import java.util.ArrayList;
  3. import com.thoughtworks.xstream.XStream;
  4. public class TestXStream {
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. DiskInfo disk1 = new DiskInfo();
  10. disk1.setName("D:\\");
  11. disk1.setTotleSize(100);
  12. disk1.setUserSize(20);
  13. disk1.setAvilableSize(80);
  14. DiskInfo disk2 = new DiskInfo();
  15. disk2.setName("E:\\");
  16. disk2.setTotleSize(200);
  17. disk2.setUserSize(40);
  18. disk2.setAvilableSize(160);
  19. ArrayList<DiskInfo> diskInfos = new ArrayList<DiskInfo>();
  20. diskInfos.add(disk1);
  21. diskInfos.add(disk2);
  22. HardwareInfo hwInfo = new HardwareInfo();
  23. hwInfo.setCpuInfo("cpu info is ...");
  24. hwInfo.setNetworkInfo("network info is ...");
  25. hwInfo.setDiskInfos(diskInfos);
  26. XStream xStream = new XStream();
  27. xStream.autodetectAnnotations(true);
  28. String xml = xStream.toXML(hwInfo);
  29. System.out.println(xml);
  30. HardwareInfo info2 = (HardwareInfo) xStream.fromXML(xml);
  31. System.out.println(info2);
  32. }
  33. }

输出如下:

  1. <HardwareInfo>
  2. <cpuInfo>cpu info is ...</cpuInfo>
  3. <networkInfo>network info is ...</networkInfo>
  4. <diskInfos>
  5. <DiskInfo diskName="D:\">
  6. <totalSize>100</totalSize>
  7. <avilableSize>80</avilableSize>
  8. <usedSize>20</usedSize>
  9. </DiskInfo>
  10. <DiskInfo diskName="E:\">
  11. <totalSize>200</totalSize>
  12. <avilableSize>160</avilableSize>
  13. <usedSize>40</usedSize>
  14. </DiskInfo>
  15. </diskInfos>
  16. </HardwareInfo>
  17. cpu info is ...
  18. network info is ...
  19. D:\
  20. TotalSize:100|Used Size:20|Available Size:80
  21. E:\
  22. TotalSize:200|Used Size:40|Available Size:160

4.常用XStream注解 
1)@XStreamAlias注解可在类与属性上使用设置名称,相当于: xstream.alias("blog", Blog.class); 
2)@XStreamImplicit去集合节点名:相当于 xstream.addImplicitCollection(Blog.class, "entries"); 
3) @XStreamConverter(SingleValueCalendarConverter.class) 
    private Calendar createdTime = new GregorianCalendar();

XStream转换Java对象与XML的更多相关文章

  1. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

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

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

  3. Java对象表示方式2:XStream实现对对象的XML化

    上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象.总结一下这种对象表示方式的优缺点: 1.纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持 ...

  4. java对象与xml相互转换 ---- xstream

    XStream是一个Java对象和XML相互转换的工具,很好很强大.提供了所有的基础类型.数组.集合等类型直接转换的支持. XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用 ...

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

    JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...

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

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

  7. jaxb 专题一(JAXB 实现java对象与xml之间互相转换)

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

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

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

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

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

随机推荐

  1. AdvStringGrid 固定行、列

  2. Java--Jackson转换Date,Timestamp 到格式化字符串

    package com.diandaxia.test; import java.sql.Timestamp; import java.util.Date; /** * Created by del-b ...

  3. 推荐 远程部署 fabric

    自己写的一个例子: from fabric.api import run, env env.hosts = ['nanjing','hefei','haerbin','lanzhou','taiyua ...

  4. linux 101 hacks 5PS1

    PS1——默认提示符 看完这一章,我心里若干个卧槽.. 如下所示, 可以通过修改 Linux 下的默认提示符,使其更加实用.在下面的例子中,默认的 PS1的值是“ \s-\v\$”,显示出了 shel ...

  5. poj2387 Til the Cows Come Home(Dijkstra)

    题目链接 http://poj.org/problem?id=2387 题意 有n个路标,编号1~n,输入路标编号及路标之间相隔的距离,求从路标n到路标1的最短路径(由于是无向图,所以也就是求从路标1 ...

  6. Bootstrap入门八:图片

    1.响应式图片 在 Bootstrap 版本 3 中,通过为图片添加 .img-responsive 类可以让图片支持响应式布局.其实质是为图片设置了 max-width: 100%;. height ...

  7. freertos的钩子函数

    在main中添加: /** * @brief FreeRTOS 内存分配失败钩子函数 */ void vApplicationMallocFailedHook(void) { taskDISABLE_ ...

  8. 安卓RecylerView嵌套和事件处理

    最近遇到了一个需求:RecylerView的某一项为listView,即listView嵌套,且要求内部ListView可以滑动,高度固定. 如果直接简单的写完,会发现有两个问题: 1.内部listV ...

  9. react篇章-React Props

    state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变.这就是为什么有些容器组件需要定义 state 来更新和修改数据. 而子组件只能通过 pro ...

  10. CSUOJ 1956 数字和

    Description 长者对小明施加了膜法,使得小明每天起床就像马丁的早晨一样. 今天小明早上起来后发现身体虽然变小,头脑依旧不变变傻. 他有一条纸带,上面有n个数字,第i个数字为Ai. 他想把纸带 ...