`

xStream之xml

    博客分类:
  • XML
 
阅读更多
1. 把对象进行字符串输出,把字符串作为对象读入
package org.frame.xstream;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;

import org.frame.xstream.dataobject.blog.Entry;

import com.thoughtworks.xstream.XStream;

public class TestObjectOutputStream {

	public static void main(String[] args) throws IOException, ClassNotFoundException {
		XStream xstream = new XStream(); 
		StringWriter someWriter = new StringWriter();
		ObjectOutputStream out = xstream.createObjectOutputStream(someWriter);
		out.writeObject(new Entry("Joe", "Walnes"));
		out.writeObject(new Entry("Someone", "Else"));
		out.writeObject("hello");
		out.writeInt(12345); 
		out.close();
		System.out.println(someWriter.toString());
		
		StringReader someReader = new StringReader(someWriter.toString());
		ObjectInputStream in = xstream.createObjectInputStream(someReader);

		Entry a = (Entry)in.readObject();
		Entry b = (Entry)in.readObject(); 
		String h = (String)in.readObject();
		int aa = in.readInt();
		System.out.println(a.title);
		System.out.println(a.description);
		System.out.println(b.title);
		System.out.println(b.description);
		System.out.println(h);
		System.out.println(aa);
	}
}


2. 把对象序列化到文件,和把文件反序列化为对象
package org.frame.xstream;

import java.util.Iterator;
import java.util.List;

import org.frame.xstream.dataobject.blog.Author;
import java.io.File;

import com.thoughtworks.xstream.persistence.FilePersistenceStrategy;
import com.thoughtworks.xstream.persistence.PersistenceStrategy;
import com.thoughtworks.xstream.persistence.XmlArrayList;

public class TestPersistence {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//the E:/tmp must be exists
		PersistenceStrategy strategy = new FilePersistenceStrategy(new File("E:/tmp"));
		add(strategy);
		remove(strategy);
	}
	
	
	public static void add(PersistenceStrategy strategy ){
		// creates the list:
		List list = new XmlArrayList(strategy);
		
		// adds four authors
		list.add(new Author("joe walnes"));
		list.add(new Author("joerg schaible"));
		list.add(new Author("mauro talevi"));
		list.add(new Author("guilherme silveira"));
		
		// adding an extra author
		Author mistake = new Author("mama");
		list.add(mistake);
		//五个对象会生成五个文件 int@1.xml, int@2.xml, int@3.xml, int@4.xml, int@5.xml
		//原来xstream生成全名的原因是为了序列化和反序列化.
	}
	
	public static void remove(PersistenceStrategy strategy){
		// looks up the list:
		List list = new XmlArrayList(strategy);
		
		// remember the list is still there! the files int@[1-5].xml are still in /tmp!
		// the list was persisted!
		
		for(Iterator it = list.iterator(); it.hasNext(); ) {
			Author author = (Author) it.next();
			if(author.getName().equals("mama")) {
				System.out.println("Removing mama...");
				it.remove();
			} else {
				System.out.println("Keeping " + author.getName());
			}
		}
	}

}


文件内容如下
<org.frame.xstream.dataobject.blog.Author>
  <name>mauro talevi</name>
</org.frame.xstream.dataobject.blog.Author>

其实这种方式挺好,比如会员登陆可以生成其登陆的基本信息,需要获取的时候,从文件系统反序列化读取,与数据库类似,但是存储的内容比较少,适合一般的场景,不需要数据库时[当然如果使用这种方式来实现数据库的API也不错啊,有时间研究研究,写测试用例的时候就可以更清晰了]
3. 把json转化为对象,和把对象生成对应的json
package org.frame.xstream;

import java.io.Writer;

import org.frame.xstream.dataobject.blog.Entry;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
import com.thoughtworks.xstream.io.json.JsonWriter;

/**
 * 其实使用返回的 { susccess: "true", errorMessage: "你长得太丑了" }
 * 
 * 可以使用对象形式,也可以建一个vm文件来维护返回的信息,推荐*.vm. 当然使用Action直接返回字符串,比拼凑的好玩点.
 * 
 * @author yangchunlong.tw
 * 
 */
public class TestWithJson {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		XStream xstream = createByJettison();
		jsonToObject(xstream);
	}

	public static void createJson(XStream xstream) {
		Entry product = new Entry("Banana", "123");
		xstream.setMode(XStream.NO_REFERENCES);
		xstream.alias("product", Entry.class);
		System.out.println(xstream.toXML(product));
		// 把xstream使用到json上也是相当给力的.

		// 这里都有一个对象名,还有一个不要根节点的
	}

	public static void jsonToObject(XStream xstream) {
		String json = "{\"product\":{\"title\":\"Banana\",\"description\":123}}";

		//XStream xstream = new XStream(new JettisonMappedXmlDriver());
		xstream.alias("product", Entry.class);
		Entry product = (Entry) xstream.fromXML(json);
		System.out.println(product.title);
		System.out.println(product.description);
	}

	public static XStream createByJettison() {
		return new XStream(new JettisonMappedXmlDriver());
	}

	public static XStream createByJDK() {
		// 不需要根节点,这个牛B了,不是接口也可以重写方法
		return new XStream(new JsonHierarchicalStreamDriver() {
			public HierarchicalStreamWriter createWriter(Writer writer) {
				return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
			}
		});
	}

}



4. 把对象转化为xml和把xml转化为对象
package org.frame.xstream;

import org.frame.xstream.dataobject.Person;
import org.frame.xstream.dataobject.PhoneNumber;

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

public class TestXStream {

	public static void main(String[] args) {
		//声名xstream
		XStream xstream = createByXPP3();
		xstream.alias("person", Person.class);
		xstream.alias("phonenumber", PhoneNumber.class);
		
		//组织对象
		Person joe = new Person("Joe", "Walnes");
		joe.setPhone(new PhoneNumber(123, "1234-456")); 
		
		//生成xml
		String xml = xstream.toXML(joe);
		System.out.println(xml);
		
		Person re = (Person) xstream.fromXML(xml);
		System.out.println(re.getFirstname());
		System.out.println(re.getLastname());
		System.out.println(re.getPhone().getCode());
		System.out.println(re.getPhone().getNumber());
		
	}
	
	/**
	 * XPP3. 
	 * 
	 * javax.xml.parsers.DocumentBuilderFactory
	 * @return
	 */
	public static XStream createByXPP3(){
		return  new XStream(); 
	}
	
	/**
	 * JAXP DOM parser 
	 * 
	 * javax.xml.parsers.DocumentBuilderFactory
	 * @return
	 */
	public static XStream createByDomDrive(){
		return  new XStream(new DomDriver()); 
	}
	
	/**
	 * Java 6 the integrated StAX parser
	 * <?xml version="1.0" ?>
	 * 
	 * @return
	 */
	public static XStream createByStax(){
		return  new XStream(new StaxDriver()); 
	}
	
	
}
5. 可以使用xstream高级有功能,使实体与xml名字不对应也能互转
package org.frame.xstream;

import org.frame.xstream.dataobject.Person;
import org.frame.xstream.dataobject.PhoneNumber;
import org.frame.xstream.dataobject.blog.Author;
import org.frame.xstream.dataobject.blog.AuthorConverter;
import org.frame.xstream.dataobject.blog.Blog;
import org.frame.xstream.dataobject.blog.Entry;

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

public class TestXStreamAlias {

	public static void main(String[] args) {
		
		Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
        teamBlog.add(new Entry("first","My first blog entry."));
        teamBlog.add(new Entry("tutorial",
                "Today we have developed a nice alias tutorial. Tell your friends! NOW!"));

        XStream xstream = createByXPP3();
       // xstream.alias("blog", Blog.class);
       // xstream.alias("entry", Entry.class);//指定类的别包
       // xstream.aliasPackage("org.ycl", "org.frame");//改变包名
        xstream.processAnnotations(Blog.class);//启动Blog类的注解
        
        
       // xstream.useAttributeFor(Blog.class, "writer");//设置节点为属性
        xstream.aliasField("author", Blog.class, "writer");//指定类中属性的别名 
        xstream.processAnnotations(Entry.class);//启动Entry类的注解
        //如何把Anthor对象转化为String
        //xstream.registerConverter(new AuthorConverter());
       // xstream.addImplicitCollection(Blog.class, "entries");//不显示集合元素.
        String xml = xstream.toXML(teamBlog);
        System.out.println(xml); 
        
        Blog re = (Blog) xstream.fromXML(xml); 
        System.out.println(re.getContent());
        System.out.println(re.writer.getName());
	}
	
	/**
	 * XPP3. 
	 * 
	 * javax.xml.parsers.DocumentBuilderFactory
	 * @return
	 */
	public static XStream createByXPP3(){
		return  new XStream(); 
	}
	
	/**
	 * JAXP DOM parser 
	 * 
	 * javax.xml.parsers.DocumentBuilderFactory
	 * @return
	 */
	public static XStream createByDomDrive(){
		return  new XStream(new DomDriver()); 
	}
	
	/**
	 * Java 6 the integrated StAX parser
	 * <?xml version="1.0" ?>
	 * 
	 * @return
	 */
	public static XStream createByStax(){
		return  new XStream(new StaxDriver()); 
	}
	
	
}


分享到:
评论

相关推荐

    Java用xStream拼接xml

    Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...

    XStream解析xml demo

    而XStream是一个Java库,它提供了简单且直观的方式来序列化和反序列化Java对象到XML,以及从XML回溯到Java对象。本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解...

    XStream解析XML实例

    **XStream解析XML实例** 在Java开发中,处理XML数据是一项常见的任务,XStream库提供了一个简单而强大的方式来将Java对象序列化为XML,以及从XML反序列化回Java对象。这个实例将深入探讨如何使用XStream进行XML操作...

    Xstream生产xml和解析xml

    ### Xstream:Java与XML之间的桥梁 Xstream是一款强大的Java库,用于实现Java对象与XML文档之间的转换。这种转换不仅支持基本数据类型,也适用于复杂的数据结构,包括自定义类和集合。Xstream的设计旨在简化序列化...

    利用XStream读写xml文件

    XStream是一款开源的Java库,用于简化XML文件的序列化与反序列化过程。它的设计理念是将XML数据映射到Java对象模型,反之亦然,而无需复杂的配置或显式的映射规则。XStream支持广泛的Java类型,并且易于集成到现有的...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    XStream库提供了一个简单、直观的方式来实现这种转换,使得XML序列化和反序列化变得非常方便。本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一...

    Xstream解析xml

    Xstream则是一个Java库,它提供了将Java对象序列化为XML,以及从XML反序列化回Java对象的能力。在处理复杂的XML文件时,Xstream因其简单易用和灵活性而备受青睐。本篇文章将深入探讨如何利用Xstream解析XML文件,并...

    xstream将xml文档转换成json对象

    XStream是一个强大的Java库,它允许我们方便地将Java对象序列化为XML,反之亦然。在这个场景中,我们将探讨如何使用XStream将XML文档转换成Java对象,进而转化为JSON对象。 首先,我们需要引入XStream库。XStream的...

    XStream XML解析

    **XStream XML解析** XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。...

    xStream转换xml和json源码

    xStream是一个轻量级的Java库,用于将Java对象序列化为XML,同时也能将XML反序列化回Java对象。这个强大的工具同样支持JSON格式,使得在Java应用程序中处理XML和JSON数据变得非常便捷。本篇文章将深入探讨xStream...

    XStream解析xml 转换成对象案例

    在实际项目中,XStream的强大之处在于其灵活性和易用性。它可以轻松地处理复杂的对象结构,并且提供了许多自定义选项,如日期格式化、类型转换等。但是,由于XStream默认的信任所有输入,所以在处理不受信任的数据时...

    xstream解析xml

    XStream是一个轻量级、高性能的Java库,它能够将Java对象序列化为XML,反之也能将XML反序列化为Java对象。这使得XML数据与Java对象之间的转换变得非常简单。 **XStream库的核心特性:** 1. **直观的映射:** ...

    xStream 实现xml与 java对象的转换

    【标题】:“xStream 实现xml与 java对象的转换” 在Java开发中,XML作为一种常见的数据交换格式,常用于存储和传输数据。然而,XML与Java对象之间的转换并不总是直观和简便的。这时,xStream库应运而生,它提供了...

    xstream轻松解析xml到java对象

    XStream是一个Java库,它能将Java对象序列化为XML,同时也能将XML反序列化为Java对象,极大地简化了XML处理过程。 XStream的工作原理是基于反射和类型转换,它可以自动地映射Java类的字段到XML元素,反之亦然。这...

    xstream对象与xml转换

    在Java编程语言中,XStream库提供了一个简单且强大的机制,用于将Java对象序列化为XML,反之亦然。这使得在存储数据、传输数据或持久化对象时非常方便。本教程将深入探讨XStream库及其在Java中的使用,通过实际的...

    使用XStream操作xml教程

    XStream库提供了一个优雅的方式来将Java对象转换为XML,反之亦然,使得处理XML数据变得更加简单。本教程将深入探讨如何使用XStream进行XML操作。 一、XStream简介 XStream是一个开源库,由Johannes Link开发,它...

    使用xstream解析xml,xml与pojo的双向转化,完整的java 工程

    本项目提供了一个完整的Java工程示例,演示了如何使用XStream实现XML到POJO以及POJO到XML的双向转化,并包含了必要的jar包和测试类,可以直接运行。 XStream是JVM平台上的一个开源库,由XStream Software公司开发,...

    xml解析及使用XStream实现javaBean与xml之间的转换

    本篇将详细讲解XML的解析方式及其在Java中的应用,特别是如何使用XStream库进行JavaBean与XML之间的互转。 1. **XML解析方式** - DOM解析:Document Object Model,它一次性加载整个XML文档到内存,形成一棵树形...

    XStream XML与Json转换

    在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,XStream支持指定别名。XStream支持以方法调用的方式,或是Java 标注的方式指定别名。 ...

    xStream xml to bean

    在Java开发中,数据转换是常见的任务之一,特别是在处理XML数据时。xStream是一个轻量级的库,它提供了一种简单的方式来将Java对象序列化为XML,反之亦然。这个工具类的目标就是利用xStream的功能,方便地将XML文档...

Global site tag (gtag.js) - Google Analytics