`

XStream转换Java对象与XML

    博客分类:
  • java
阅读更多

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

Java代码 复制代码 收藏代码
  1. <dependency>  
  2.     <groupId>com.thoughtworks.xstream</groupId>  
  3.     <artifactId>xstream</artifactId>  
  4.     <version>1.4.2</version>  
  5. </dependency>  
<dependency>
	<groupId>com.thoughtworks.xstream</groupId>
	<artifactId>xstream</artifactId>
	<version>1.4.2</version>
</dependency>


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

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

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

@XStreamAlias("DiskInfo")
public class DiskInfo {
	@XStreamAsAttribute
	@XStreamAlias("diskName")
	private String name;
	private int totalSize;
	private int avilableSize;
	private int usedSize;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getTotleSize() {
		return totalSize;
	}

	public void setTotleSize(int totleSize) {
		this.totalSize = totleSize;
	}

	public int getAvilableSize() {
		return avilableSize;
	}

	public void setAvilableSize(int avilableSize) {
		this.avilableSize = avilableSize;
	}

	public int getUserSize() {
		return usedSize;
	}

	public void setUserSize(int userSize) {
		this.usedSize = userSize;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(name + "\r\n");
		sb.append("TotalSize:" + totalSize + "|Used Size:" + usedSize
				+ "|Available Size:" + avilableSize);
		return sb.toString();
	}
}

package com.ajita.xstream;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("HardwareInfo")
public class HardwareInfo {
	private String cpuInfo;
	private String networkInfo;
	private List<DiskInfo> diskInfos;

	public String getCpuInfo() {
		return cpuInfo;
	}

	public void setCpuInfo(String cpuInfo) {
		this.cpuInfo = cpuInfo;
	}

	public String getNetworkInfo() {
		return networkInfo;
	}

	public void setNetworkInfo(String networkInfo) {
		this.networkInfo = networkInfo;
	}

	public List<DiskInfo> getDiskInfos() {
		return diskInfos;
	}

	public void setDiskInfos(List<DiskInfo> diskInfos) {
		this.diskInfos = diskInfos;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(cpuInfo);
		sb.append("\r\n");
		sb.append(networkInfo);
		sb.append("\r\n");
		for (DiskInfo disk : diskInfos) {
			sb.append(disk.toString());
			sb.append("\r\n");
		}
		return sb.toString();
	}
}


3.新建测试代码

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

import java.util.ArrayList;

import com.thoughtworks.xstream.XStream;

public class TestXStream {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DiskInfo disk1 = new DiskInfo();
		disk1.setName("D:\\");
		disk1.setTotleSize(100);
		disk1.setUserSize(20);
		disk1.setAvilableSize(80);
		DiskInfo disk2 = new DiskInfo();
		disk2.setName("E:\\");
		disk2.setTotleSize(200);
		disk2.setUserSize(40);
		disk2.setAvilableSize(160);

		ArrayList<DiskInfo> diskInfos = new ArrayList<DiskInfo>();
		diskInfos.add(disk1);
		diskInfos.add(disk2);

		HardwareInfo hwInfo = new HardwareInfo();
		hwInfo.setCpuInfo("cpu info is ...");
		hwInfo.setNetworkInfo("network info is ...");
		hwInfo.setDiskInfos(diskInfos);

		XStream xStream = new XStream();
		xStream.autodetectAnnotations(true);
		String xml = xStream.toXML(hwInfo);
		System.out.println(xml);

		HardwareInfo info2 = (HardwareInfo) xStream.fromXML(xml);
		System.out.println(info2);
	}

}


输出如下:

Java代码 复制代码 收藏代码
  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  
<HardwareInfo>
  <cpuInfo>cpu info is ...</cpuInfo>
  <networkInfo>network info is ...</networkInfo>
  <diskInfos>
    <DiskInfo diskName="D:\">
      <totalSize>100</totalSize>
      <avilableSize>80</avilableSize>
      <usedSize>20</usedSize>
    </DiskInfo>
    <DiskInfo diskName="E:\">
      <totalSize>200</totalSize>
      <avilableSize>160</avilableSize>
      <usedSize>40</usedSize>
    </DiskInfo>
  </diskInfos>
</HardwareInfo>
cpu info is ...
network info is ...
D:\
TotalSize:100|Used Size:20|Available Size:80
E:\
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();

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics