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. 洛谷P3366最小生成树

    传送门啦 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...

  2. Http PipeLining

    Http PipeLining */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { ...

  3. Jmeter的接口测试简介

    一.安装Jmeter                                                          Jmeter官方首页:http://jmeter.apache. ...

  4. Kotlin尝试

    Kotlin 是一种静态类型的编程语言,可在 Java 虚拟机上运行,也可以编译为 JavaScript 源代码.其主要发展来自位于俄罗斯圣彼得堡的 JetBrains 程序员团队.虽然语法与 Jav ...

  5. 一步一步学习IdentityServer3 (10)

    在某些服务器环境下 identityserver3 会闹情绪, 比如在google浏览器下授权失败(陷入死循环) 查了很多资料好像然并卵 Microsoft.Owin.Security.Notific ...

  6. Hive(三)Hive元数据信息对应MySQL数据库表

    概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理.上一篇hive的安装也是将元数据信息存放在MySQL数据库中. Hive的元数据信息在MySQL数据中有57 ...

  7. 【51nod】1851 俄罗斯方块

    题解 最近一遇到神仙题一卡就好久--做点水题滋养一下自己吧= = 显然我们发现放一个方块的奇偶性不会改变,所以格子如果黑格子是奇数,那么就是No 我们发现每个2 × 3的方格里的2 × 1的黑格子都可 ...

  8. 操作系统基础梳理--进程&线程

    1.举个栗子 1.1.知乎一形象例子 [摘自知乎]比如说十几年前,马化腾在写QQ,假设他那个时候不懂多进程多线程.然后他就开始写啦,这玩意儿不简单吗,不就是用户输入什么,把信息打包发到另一个用户,再显 ...

  9. pomelo 安装

    1. 安装nodejs ,python ,C++运行环境(VS2012以上版本) 2.npm install -g node-gyp --registry=https://registry.npm.t ...

  10. 在windows下的CLI模式下如何运行php文件

    https://blog.csdn.net/evkj2013/article/details/52313728 https://jingyan.baidu.com/article/da1091fb09 ...