`

XStream基本用法

    博客分类:
  • xml
阅读更多

Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。

 

一、所需jar包

    下载xstream-x.x.x.jar,放到项目中

二、无anotation实例

1、先创建一个Person.java

package com.xu.xstream;

import java.util.List;

public class Person {

	private int id;

	private String name;

	private String sex;

	private List<Address> address;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public List<Address> getAddress() {
		return address;
	}

	public void setAddress(List<Address> address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ",  sex=" + sex+ ", address=" + address + "]";
	}

}

 

2、创建PersonXStream.java操作

 

package com.xu.xstream;

import java.util.ArrayList;
import java.util.List;

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

/**
 * PersonXStream.java
 * @author XuRuiLu
 *
 * 2015-3-2
 */
public class PersonXStream {

	/**
	 * java对象转换成XML
	 * @param person
	 * @return
	 */
	public static String javaObjectToXml(Person  person){
		XStream xstream = new XStream(new DomDriver());
		xstream.alias("Person", Person.class);	//使用别名
		xstream.alias("Address", Address.class);	//使用别名
//		xstream.useAttributeFor(Person.class, "name");	//将本类中的字段来作为xml的属性
		xstream.addImplicitCollection(Person.class, "address");	//隐身集合
		return xstream.toXML(person);
	}
	
	/**
	 * Xml转换成java对象
	 * @param xml
	 * @return
	 */
	public static Person xmlToJavaObject(String xml){
		Person person = null;
		XStream xstream = new XStream(new DomDriver());
		
		//注意这里前面是用别名,这里也要用别名,不然会报错找不到节点
		xstream.alias("Person", Person.class);
		xstream.alias("Address", Address.class);
		xstream.addImplicitCollection(Person.class, "address");	//隐身集合
		person = (Person)xstream.fromXML(xml);
		return person;
	}
	
	/**
	 * 测试javaObjectToXml方法
	 */
	public static void testJavaObjectToXml(){
		List<Address> addressList = new ArrayList<Address>();
		Address address = new Address("郑州市经三路", "123456"); 
		Address address2 = new Address("徐州市经三路", "1234"); 
		addressList.add(address);
		addressList.add(address2);
		Person person = new Person();
		person.setId(1);
		person.setName("zhangsan");
		person.setSex("男");
		person.setAddress(addressList);
		String str = javaObjectToXml(person);
		System.out.println(str);
	}
	
	/**
	 * 测试XmlToJavaObject方法
	 */
	public static void testXmlToJavaObject(){
		String xml = "<Person><id>1</id><name>zhangsan</name><sex>男</sex><Address><add>郑州市经三路</add>" +
				"<zipcode>123456</zipcode></Address><Address><add>徐州市经三路</add><zipcode>1234</zipcode></Address></Person>";
		Person person = xmlToJavaObject(xml);
		System.out.println(person.toString());
	}
	
	public static void main(String[] args) {
//		testJavaObjectToXml();	//测试java对象转成Xml
		
		testXmlToJavaObject();	//测试XmlToJavaObject方法
	}
}

3. 使每个节点都加上<![CDATA[]]>

import java.io.Writer;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;

public class XStreamCDATA {
	protected static String PREFIX_CDATA = "<![CDATA[";
	protected static String SUFFIX_CDATA = "]]>";

	public static XStream initXStream() {
		XStream xstream = new XStream(new XppDriver() {  
		    public HierarchicalStreamWriter createWriter(Writer out) {  
		        return new PrettyPrintWriter(out) {  
		            // 对所有xml节点的转换都增加CDATA标记  
		            boolean cdata = true;  
		  
		            @SuppressWarnings("unchecked")  
		            public void startNode(String name, Class clazz) {  
		                super.startNode(name, clazz);  
		            }  
		  
		            protected void writeText(QuickWriter writer, String text) {  
		                if (cdata) {  
		                    writer.write(PREFIX_CDATA);  
		                    writer.write(text);  
		                    writer.write(SUFFIX_CDATA);  
		                } else {  
		                    writer.write(text);  
		                }  
		            }  
		        };  
		    }  
		});
		return xstream;
	}
}

  

三、anotation操作

1、先创建User.java,Address.java类

    User.java

package com.xu.xstream;

import java.util.List;

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

@XStreamAlias("User") //别名
public class User {

	private int id;

	//@XStreamOmitField  
	private String name;

	private String password;

	@XStreamImplicit	//隐式集合
	private List<Address> addressList;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<Address> getAddressList() {
		return addressList;
	}

	public void setAddressList(List<Address> addressList) {
		this.addressList = addressList;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password
				+ ", addressList=" + addressList + "]";
	}

}

   Address.java

package com.xu.xstream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("Address")
public class Address {
	private String add;
	private String zipcode;

	public Address() {

	}

	public Address(String add, String zipcode) {
		this.add = add;
		this.zipcode = zipcode;
	}

	public String getAdd() {
		return add;
	}

	public void setAdd(String add) {
		this.add = add;
	}

	public String getZipcode() {
		return zipcode;
	}

	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}

	@Override
	public String toString() {
		return "Address [add=" + add + ", zipcode=" + zipcode + "]";
	}
	
	

}

3、创建UserTest.java测试

package com.xu.xstream;

import java.util.ArrayList;
import java.util.List;

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

public class UserTest {
	
	/**
	 * 测试java对象转换XMl
	 */
	public static void testJavaObjectToXml(){
		XStream xstream = new XStream(new DomDriver());
		xstream.processAnnotations(User.class);
		User user = new User();
		user.setId(1);
		user.setName("zhangsan");
		user.setPassword("password");
		List<Address> addressList = new ArrayList<Address>();
		Address address = new Address("郑州市经三路", "123456"); 
		Address address2 = new Address("徐州市经三路", "1234"); 
		addressList.add(address);
		addressList.add(address2);
		user.setAddressList(addressList);
		System.out.println(xstream.toXML(user));
	}
	
	/**
	 * 测试XML转换成java对象
	 */
	public static void testXmlToJavaObject(){
		String xml = "<User><id>1</id><name>zhangsan</name><password>password</password>" +
				"<Address><add>郑州市经三路</add><zipcode>123456</zipcode>" +
				"</Address><Address><add>徐州市经三路</add><zipcode>1234</zipcode>" +
				"</Address></User>";
		User user = null;
		XStream xstream = new XStream(new DomDriver());
		xstream.processAnnotations(User.class);
		//注意这里前面是用别名,这里也要用别名,不然会报错找不到节点
		user = (User)xstream.fromXML(xml);
		System.out.println(user.toString());
	}

	public static void main(String[] args) {
//		testJavaObjectToXml();	//调用 测试java对象转换XMl方法
		
		testXmlToJavaObject();	//调用  测试XML转换成java对象方法
		
	}
}

 

分享到:
评论

相关推荐

    xStream用法总结

    xstream详细用法,包括xml转换为bean及bean转换为xml

    最齐全的xstream1.4.8.jar

    最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...

    xstream-1.4.15.jar

    Xstream上次对CVE-2020-26217处理并不彻底,虽然通过黑名单方法阻止了远程代码执行,但是仍然可以采用类似思路实现文件删除与服务器请求伪造。 影响版本 Xstream 修复版本 Xstream &gt; = 1.4.15 风险等级 严重

    xstream最新版 - xstream-1.4.18.jar

    xstream最新版jar包

    xstream-1.4.11-API文档-中文版.zip

    赠送jar包:xstream-1.4.11.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    XStream XML与Json转换

    XStream在运行时使用Java反射机制对要进行序列化的...XStream支持以方法调用的方式,或是Java 标注的方式指定别名。 XStream在进行数据类型转换时,使用系统缺省的类型转换器。同时,也支持用户自定义的类型转换器。

    XStream组件进行Object与XML互转用法

    XStream组件进行Object与XML互转用法 1.所需求jar包: xstream-1.3.1.jar 2.如果仅进行OBJECT与XML之间互转只需要这一个jar 包及XStream这一个类就可又了 用法说明: 1.OBJECT 转XML //第一步:准备好要进行XML...

    xstream-1.4.19.jar

    xstream-1.4.19.jar

    xstream-1.4.jar

    xstream jar包,java对象转xml以及xml转java对象,操作很简单。

    xstream-1.4.7-API文档-中文版.zip

    赠送jar包:xstream-1.4.7.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    xstream1.22.jar

    xstream 1.2 ,xstream 1.2.2.jar xstream 1.2 ,xstream 1.2.2.jar

    XStream解析XML实例

    XStream解析XML实例

    XStream DOC

    XStream DOC

    xstream-1.4.7.jar

    xstream-1.4.7.jar XML

    xstream-1.4.5.jar

    xstream xstream-1.4.5.jar

    xstream-1.4.2.jar

    xstream-1.4.2.jar,官网上也有,由于本人分没了,希望有分的同志给点分。如果你也每份,请上官网下,地址:http://xstream.codehaus.org/download.html

    XStream使用方法总结-对象-转换.txt

    XStream使用方法总结L-对象-转换.txt

    xstream-1.4.2

    xstream-1.4.2

    xstream相关的jar包

    xstream所需要的jar包,xstream-1.4.9.jar、dom4j-1.6.1.jar、xpp3_min-1.1.4c.jar等

    解决XStream注解同名冲突

    多个类注解@XStreamAlias,value相同、且在集合上使用了@XStreamImplicit会出现异常: com.thoughtworks.xstream.converters.ConversionException: No field 'null' found in class '.....(注解的类路径)' ---- ...

Global site tag (gtag.js) - Google Analytics