`

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使用文档 wd.docx

    为了演示 XStream 的基本用法,可以创建一个新的 Java 项目。首先,定义两个简单的 Java 类:`Person` 和 `PhoneNumber`。`Person` 类包含姓名和电话号码属性,而 `PhoneNumber` 类则表示一个电话号码。如下所示: ...

    xstream 的高级用法,自定义输出结构

    《XStream的高级用法与自定义输出结构详解》 XStream是一款强大的Java库,用于将Java对象序列化为XML,以及将XML反序列化回Java对象。它以其简洁的API和灵活的配置赢得了广大开发者喜爱。在日常开发中,我们不仅...

    Xstream使用说明

    #### 二、Xstream基本使用 Xstream的使用非常简单直观,下面通过一个简单的示例来展示如何使用Xstream进行序列化和反序列化。 ##### 2.1 JavaBean定义 首先定义一个简单的`Person`类作为JavaBean: ```java ...

    xstream使用案例

    ### XStream 的基本概念 1. **序列化**: 将 Java 对象转换为 XML 过程称为序列化。XStream 提供了 `toXML()` 方法,可以直接将一个对象转换成 XML 字符串。 2. **反序列化**: 反之,从 XML 文本还原为 Java 对象的...

    使用XStream操作xml教程

    在Java开发中,数据的序列化与反序列...通过了解其基本用法和自定义功能,开发者可以在项目中有效地利用XML进行数据交换和存储。在实际应用中,根据项目需求进行适当的配置和安全优化,可以确保代码的稳定性和安全性。

    XStream简单应用实例

    **XStream简介** XStream是一款强大的Java库,用于将Java对象序列化为XML,反之亦然。它由Joe Walnes创建,提供了一种简洁而直观...了解和掌握XStream的基本用法和高级特性,能帮助开发者更高效地处理XML相关的任务。

    使用XStream 多集合生成xml

    首先,我们需要了解XStream的基本用法。XStream的核心是`XStream`类,它提供了`toXML()`方法用于将Java对象转换为XML字符串,以及`fromXML()`方法用于反向操作。要使用XStream,你需要先创建一个`XStream`实例,然后...

    xstream教程资料.rar

    三、XStream的基本用法 1. 对象转XML: XStream的`toXML()`方法可以将Java对象转换为XML字符串。例如,对于一个名为`Person`的对象,通过`xstream.toXML(person)`即可得到对应的XML表示。 2.XML转对象: 使用`from...

    XStream+1.3(xstream).CHM

    博文链接(https://676744379-qq-com.iteye.com/blog/965624)可能提供了关于如何使用XStream的详细教程,包括安装、配置以及基本用法示例,对于初学者来说是一份很好的参考资料。 在实际使用中,`xstream-1.3.1....

    xstream学习文档及实例

    在本学习文档中,我们将深入探讨 XStream 的核心概念、用法以及如何在实际项目中应用。 一、XStream 简介 XStream 能够将复杂的 Java 对象结构转换成易于读写的 XML 格式,同时也能将 XML 文档还原为对应的 Java ...

    XStream解析各种数据格式

    ### XStream解析各种数据格式 #### 一、XStream简介 XStream 是一个简单高效的 Java 库,用于将 Java 对象序列化为 ...通过本文介绍的基本使用方法和高级特性,开发者可以更好地利用 XStream 来满足项目的实际需求。

    xstream-1.4.2

    本文将深入探讨XStream 1.4.2中的核心特性、使用方法以及常见应用场景。 一、XStream的核心特性 1. **简单的API**:XStream的核心设计理念就是简洁易用,它的API设计使得对象序列化和反序列化的过程直观而直接,...

    XStream Java下的使用

    2. **基本使用** XStream的核心类是`XStream`,你可以通过创建其实例并调用`fromXML()`和`toXML()`方法来实现XML与Java对象之间的转换。例如,如果你有一个简单的Java对象`Person`: ```java class Person { ...

    xstream-1.4.9实现xml与对象互转

    XStream 是一个强大的 Java 库,它允许程序员将 Java 对象序列化为 XML,反之亦然。这个过程称为对象-XML 映射。...理解 XStream 的基本用法和高级特性,可以帮助你在实际开发中更有效地利用这一工具。

    xstream-1.4-API

    在 XStream 1.4 版本中,它已经相当成熟,具有广泛的类型支持,包括基本类型、数组、集合以及自定义复杂对象。 ### 1. **XStream 的核心概念** - **序列化(Serialization)**: 将 Java 对象转换为 XML 流程,方便...

    XStream解析xml demo

    首先,我们需要理解XStream的基本用法。XStream的核心概念是通过为Java对象定义一个映射,使得对象的字段与XML元素一一对应。这可以通过使用`@XStreamAlias`注解或者在类级别定义`@XStreamConverter`来实现。例如: ...

    xStream xml to bean

    在`beanToXml()` 方法中,同样需要初始化xStream实例,然后使用`toXML()` 方法将Bean对象转换为XML字符串: ```java public String beanToXml(YourBeanClass bean) { XStream xstream = new XStream(new DomDriver...

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

    本文将详细介绍XStream的基本用法、配置选项以及如何利用它来进行对象到XML的序列化和反序列化操作。 #### 一、XStream简介 XStream是一种简单高效的工具类库,用于实现Java对象与XML数据格式之间的转换。它通过...

    XStream解析XML实例

    基本使用** XStream的使用非常直观。首先,我们需要创建一个XStream实例,然后使用它来序列化或反序列化对象。 ```java import com.thoughtworks.xstream.XStream; public class XStreamExample { public static...

Global site tag (gtag.js) - Google Analytics