XStream 用法详解 XML 转换为 java 实体类

XStream 用法详解 java 类与 XML 互换

现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现。

我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输、接口调用的朋友有所帮助。

首先要导入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 两个包;

其次是预备一个 XML 事例

<config>
<span style="white-space:pre">	</span><client type="8888" osversion="9999" version="123" oemtag="5555" area="areacode"/>
<span style="white-space:pre">	</span><protocol>1.10</protocol>
<span style="white-space:pre">	</span><sign value="asdfasdf"/>
<span style="white-space:pre">	</span><vientiance version="version"/>
</config>

其次 就是 按照 XML节点的顺序 从外 到内 编写 java PO类,此实例的目的是将上面的XML转换为 AllnewstateRQ 这个实体类,然后从里面打印出测试数据。

下面依次是  config节点 对应的 AllnewstateRQ类 ; client 节点 对应的 Client 类;sign 节点对应的 Sign类;vientiance 节点 对应的 Vientiance类。

package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("config")
public class AllnewstateRQ {
	//当节点下有独立属性的时候,需要创建一个独立的类用来保存节点内的属性
	private Client client = new Client();
	private Sign sign = new Sign();
	private Vientiance vientiance = new Vientiance();
	//当节点下没有属性,直接由StringValue的时候可直接创建String类型属性
	private String protocol;
	public Client getClient() {
		return client;
	}
	public void setClient(Client client) {
		this.client = client;
	}
	public Sign getSign() {
		return sign;
	}
	public void setSign(Sign sign) {
		this.sign = sign;
	}
	public Vientiance getVientiance() {
		return vientiance;
	}
	public void setVientiance(Vientiance vientiance) {
		this.vientiance = vientiance;
	}
	public String getProtocol() {
		return protocol;
	}
	public void setProtocol(String protocol) {
		this.protocol = protocol;
	}
}
package com.wgq.test09_xml;

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

@XStreamAlias("client")
public class Client {

	@XStreamAsAttribute	//对属性值进行注解
	private String type;//此时类中的属性名要和xml内的属性名相对应

	@XStreamAsAttribute
	private String osversion;

	@XStreamAsAttribute
	private String version;

	@XStreamAsAttribute
	private String oemtag;

	@XStreamAsAttribute
	private String area;

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getOsversion() {
		return osversion;
	}

	public void setOsversion(String osversion) {
		this.osversion = osversion;
	}

	public String getVersion() {
		return version;
	}

	public void setVersion(String version) {
		this.version = version;
	}

	public String getOemtag() {
		return oemtag;
	}

	public void setOemtag(String oemtag) {
		this.oemtag = oemtag;
	}

	public String getArea() {
		return area;
	}

	public void setArea(String area) {
		this.area = area;
	}

}
package com.wgq.test09_xml;

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

@XStreamAlias("sign") //此处要对应节点的名称
public class Sign {
	@XStreamAsAttribute
	private String value;//此处对应节点内属性名称
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
}
package com.wgq.test09_xml;

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

@XStreamAlias("vientiance")
public class Vientiance {
	@XStreamAsAttribute
	private String version;
	public String getVersion() {
		return version;
	}
	public void setVersion(String version) {
		this.version = version;
	}
}

测试main方法

package com.wgq.test09_xml;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class TestStream {

	public static void main(String[] args) {
		String reqXml = getXml();
		XStream xs = new XStream(new DomDriver());
		xs.processAnnotations(new Class[]{AllnewstateRQ.class,Client.class,Sign.class,Vientiance.class});
		Object obj = xs.fromXML(reqXml);
		AllnewstateRQ allnewstateRQ = (AllnewstateRQ) obj;
		System.out.println(allnewstateRQ.getProtocol());
		System.out.println(allnewstateRQ.getClient().getArea());
		System.out.println(reqXml);

	}

	static String getXml(){
		StringBuilder str = new StringBuilder();
		str.append("")
		.append("<config>")
		.append("<client type=\"8888\" osversion=\"9999\" version=\"123\" oemtag=\"5555\"  area=\"areacode\" />")
		.append("<protocol>1.10</protocol>")
		.append("<sign value=\"asdfasdf\" />")
		.append("<vientiance version=\"version\" />")
		.append("</config>")
		;
		return str.toString();
	}

}

输出结果:

1.10
areacode
<config><client type="8888" osversion="9999" version="123" oemtag="5555"  area="areacode" /><protocol>1.10</protocol><sign value="asdfasdf" /><vientiance version="version" /></config>

感谢 博主德莫罗 的 http://chen-rojer-gmail-com.iteye.com/blog/1435254 范例,

我参考 德莫罗 的写的这个 单元测试,将XML 转换成 指定的Object类的小例子.

XStream 用法详解 XML 转换为 java 实体类

时间: 2024-12-24 23:01:29

XStream 用法详解 XML 转换为 java 实体类的相关文章

java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的.静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是

Java下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

java定时任务类Timer和TimerTask用法详解

原文:java定时任务类Timer和TimerTask用法详解 代码下载地址:http://www.zuidaima.com/share/1550463277550592.htm package com.zuidaima.util; import java.io.IOException; import java.util.Timer; import test.MyTask; /* * 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务 * 退出任务,退出定时器.

java爬取网页内容 简单例子(2)——附jsoup的select用法详解

http://www.cnblogs.com/xiaoMzjm/p/3899366.html [背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表达式 对于没有很好正则表达式基础的人——比如说我T_T——是一件蛮困难的事.这一篇,我们改用jsoup,一个强大的解析html工具,去解析html,你会发现,一切都变得很容易. [准备工作] 下载:jsou

Java语言Socket接口用法详解

Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客户端的连接请求. 扩展: ServerSocket中常用的构造函数及方法 构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象

Java中static作用及用法详解

1.1概述: static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在.这样做有什么意义呢?在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是用static修饰的成员可以通过类名加".&q

Java Enum用法详解

Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YE

XML转换为对象操作类详解

//XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Xml; using System.Xml.Serialization; namespace WebApplication1 { public sealed class XMLSerilizable { /// <summary>

HTTP头部详解及使用Java套接字处理HTTP请求

HTTP头部详解及使用Java套接字处理HTTP请求 标签: javahttp服务器浏览器服务器socketurl 2008-03-18 17:39 9537人阅读 评论(1) 收藏 举报  分类: java(7)  进行Web开发关键是要了解超文本传输协议(HTTP),该协议用来传输网页.图像以及因特网上在浏览器与服务器间传输的其他类型文件.只要你在浏览器上输入一个URL,最前面的http://就表示使用HTTP来访问指定位置的信息.(大部分浏览器还支持其他一些不同的协议,其中FTP就是一个典