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. 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider

    数据源组件ContentProvider与其他组件不同,数据源组件并不包括特定的功能逻辑.它只是负责为应用提供数据访问的接口.Android内置的许多数据都是使用ContentProvider形式,供 ...

  2. CRF条件随机场

    CRF的进化 https://flystarhe.github.io/2016/07/13/hmm-memm-crf/参考: http://blog.echen.me/2012/01/03/intro ...

  3. IntelliJ IDEA 里 查看一个函数注释的方法是 ctrl+q

     ctrl + q 也可以看到 官方的文档注释,java真是个强大的东西,官方的每个函数都有注释,这些注释 自动生成了官方的文档,所以看官方的注释 就是 看 官方的文档.

  4. GreenPlum学习笔记:split_part与string_to_array字符截取

    偶遇一个需求:想按某个指定符号分割之后,提取字符. 例如:tag = '休闲,娱乐,运动,玩耍',想提取"休闲"这个词. 方法一:string_to_array select st ...

  5. ASP.NET MVC5+ 路由特性

    概述 ASP.NET MVC 5支持一种新的路由协议,称为路由特性. MVC5也支持以前定义路由的方式,你可以在一个项目中混合使用这两种方式来定义路由. 案例 1.使用Visual Studio 20 ...

  6. 手动安装pydev

    在网上下载pydev.zip,解压后有两个文件夹,features和plugins.把这两个文件夹复制到eclipse目录下的dropins文件夹下.

  7. bzoj 1232 [Usaco2008Nov]安慰奶牛cheer

    思路:看出跟dfs的顺序有关就很好写了, 对于一棵树来说确定了起点那么访问点的顺序就是dfs序,每个点经过 其度数遍,每条边经过2边, 那么我们将边的权值×2加上两端点的权值跑最小生成树,最后加上一个 ...

  8. MVP模型

    MVP模型一般要创建三个文件夹:View.Interactor(Model).Presenter 每个部分都有其接口和实现类,就是为了方便回调 这里做一个登陆界面为例子: 接口: Interactor ...

  9. NCPC 2016 October 8,2016 Artwork

    Problem A Artwork Problem ID: artwork Time limit: 4 seconds A template for an artwork is a white gri ...

  10. tomcat如何利用waf进行防护

    近期某一实验室遇到一个问题:web环境是windows+tomcat+mysql,检测到cookie注入,此时又不想修改代码.此时两种方案进行解决: 1.利用安软(waf)类进行检测防御.这里国内主要 ...