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. Java标记接口

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈" ...

  2. 20155309 《java程序设计》实验四Android程序设计

    任务一: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 完成这个任务,首先需要了解Android应用程序文件的组成: src目录: 在src目录中 ...

  3. Elasticsearch安全问题

    本节内容: 背景 修改默认的 Elasticsearch 集群名称 不要暴露 Elasticsearch 在公网上 不要以 root 身份运行 Elasticsearch 定期对 Elasticsea ...

  4. CCF CSP 201709-2 公共钥匙盒

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-2 公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须 ...

  5. MVC 源码调试

    源码调试,帮助你跟好理解MVC,使你开发跟牛B的程序. 1>在Visual命令行中运行“SN.EXE-Vr*,31BF3856AD364E35” 2. codeplex.com 上面找到,和你当 ...

  6. jenkins中管理用户

    jenkins中管理用户: 管理用户权限

  7. 7-10 守卫棋盘 uva11214

    输入要给n*m的棋盘  均小于10   某些格子有标记  用最少的皇后  辐射到所有的标记 限时 6666ms 用IDA*    时间6000  尴尬. #include<bits/stdc++ ...

  8. 【Java】java.lang.NullPointerException的两个原因

    自己写程序时出现过 java.lang.NullPointerException错误的一些原因 (1)自己建立了一个数组,但每个数组元素没单独初始化(单独new一个新对象). (2)在进行if (ar ...

  9. Ionic入门二:网格(Grid)页面布局

    ionic 的网格(Grid)和其他大部分框架有所不同,它采用了弹性盒子模型(Flexible Box Model) .而且在移动端,基本上的手机都支持.row 样式指定行,col 样式指定列. 1. ...

  10. MyISAM InnoDB 区别(转载)

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...