qiyadeng

专注于Java示例及教程
posts - 84, comments - 152, trackbacks - 0, articles - 34

XStream两分钟教程(译)

Posted on 2007-05-08 18:14 qiyadeng 阅读(23257) 评论(8)  编辑  收藏

 两分钟教程

  这是一个关于XStream快速的介绍。快速浏览一下你会马上知道把一个对象转换到XML或是转换回来是多么的简单。你肯定会碰到下面的问题。

 

创建能够序列化的类

  这是一组简单的类。XStream能把这些类的实例转换到XML或是转换回来。

 

public class Person { 

 
private String firstName;
 
private String lastName;
 
private PhoneNumber phonex;
 
private PhoneNumber fax;
//构造函数或是其他方法 


public class PhoneNumber { 

 
private int code;
 
private int number; 

//构造函数或是其他方法
}

 

  :注意到这些都是私有变量。XStream不关心变量的作用域。不需要getter或是setter方法。并且,XStream不限定需要默认的构造函数。

 

实例化XStream

使用XStream,简单实例化XStream类:

 

XStream xStream = new XStream(); 

 

 你需要xstream-[version].jar and xpp3-[version].jar在classpath中。XPP3是一个非常快的XML拉式转换器工具。如果你不想包含这个依赖,你可以使用标准的JAXP DOM转换器来代替。

 

XStream xStream = new XStream(new DomDriver());//不需要XPP3库 


:这个类的简单设计是为了实现通用操作的。为了实现更复杂的操作你可以选择自己创建出不同方式。

 

现在,为了使用XStream来更精简的输出XML,你可以为自定义的类创建别名到XML的元素名的映射。这是使用XStream唯一需要的映射的,甚至这个都是可选的。

 

xStream.alians("person",Person.class); 

 

:这是可选的一步。没有这步XStream也可以很好的起作用,但是XML元素的名字就会包含每个类的全称(包括包名),这将会使生成XML稍大。

 

序列号一个对象到XML

 让我们创建一个Person的实例并且填充它的变量域:

 

Person joe = new Person("Joe","Walnes"); 

joe.setPhone(
new PhoneNumber(123,"1234-456")); 

joe.setFax(
new PhoneNumber(123,"9999-999")); 

 

现在转换到XML,你要做的是简单的调用XStream:
 

String xml = xstream.toXML(joe); 

生成的XML看上去像这样:

 

<person>
  
<firstname>Joe</firstname>
  
<lastname>Walnes</lastname>
  
<phone>
    
<code>123</code>
    
<number>1234-456</number>
  
</phone>
  
<fax>
    
<code>123</code>
    
<number>9999-999</number>
  
</fax>
</person> 

 

非常简单,像创建XML一样。

 

从XML反序列化一个对象

 

从XML重新构造一个对象:
 

Person newJoe = (Person)xStream.fromXML(xml); 


XStream是多么的简单啊!

 

总结:

 

使用xStream.alias(String elementName, Class cls)为任何一个自定义类创建到类到元素的别名;

使用xStream.toXML(Object obj)转换对象到XML;

使用xStream.fromXML(String xml)转换XML到对象;

(附原文地址:http://xstream.codehaus.org/tutorial.html)

Feedback

# re: XStream两分钟教程(译)  回复  更多评论   

2007-05-08 23:22 by yeshucheng
只是在String中来回转换,如果要生成一个xml文件或者从一个xml读取呢

# re: XStream两分钟教程(译)  回复  更多评论   

2007-05-09 09:44 by qiyadeng
读:
Reader reader = new FileReader(persistFile);
Object object = (Object)xStream.fromXML(reader);
写:
FileWriter writer = new FileWriter(persistFile);
xStream.toXML(object,writer);

# re: XStream两分钟教程(译)[未登录]  回复  更多评论   

2007-12-06 16:54 by x
写的时候是乱码

# re: XStream两分钟教程(译)  回复  更多评论   

2007-12-06 17:55 by qiyadeng
用的什么编码?

# re: XStream两分钟教程(译)  回复  更多评论   

2008-01-06 23:24 by sitinspring
确实不错,值得研究一下。

# re: XStream两分钟教程(译)  回复  更多评论   

2008-12-25 17:12 by Lirf
xstream生成的xml怎么是这样的:
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>
晕...
一般都是这样啊:
<person firstname="Joe"...>

# re: XStream两分钟教程(译)  回复  更多评论   

2009-06-30 21:41 by 地方
@Lirf你会不会啊,自己不研究最新的技术。

# re: XStream两分钟教程(译)  回复  更多评论   

2013-09-04 16:02 by asd
@Lirf
我自己研究出来了一种方法:
在domain的属性上加上@XStreamAsAttribute
然后在代码中打开自动检查标签:xStream.autodetectAnnotations(true);
就能生成你要的形式的xml文档了.
不晓得还有没其他好办法.

只有注册用户登录后才能发表评论。


网站导航: