XStream使用文档Word文档下载推荐.docx
《XStream使用文档Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《XStream使用文档Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
![XStream使用文档Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/30/11b053e6-69eb-4e72-8ba2-9c35714bb4cd/11b053e6-69eb-4e72-8ba2-9c35714bb4cd1.gif)
2.1下载
XStream的网站上面可以下载到各种版本。
目前用最新版本是1.4.1,下载这个版本即可。
2.2安装
XStream的安装方法比较简单,将xstream-1.4.1.jar以及放置到类路径下面即可使用。
如下图所示:
3开始一个例子
3.1新建一个空的javaproject工程
通过eclipse向导新建一个JavaProject工程,并将上面提的两个类添加到类路径下。
工程如下:
3.2编写Java后台类,代码如下
新建一个cn的package,然后在cn下面新建两个Java类,Person和PhoneNumber,代码分别如下:
Person.java
packagecn;
publicclassPerson{
privateStringfirstname;
privateStringlastname;
privatePhoneNumberphone;
privatePhoneNumberfax;
publicPerson(StringfirstName,StringlastName){
this.firstname=firstName;
this.lastname=lastName;
}
publicStringgetFirstname(){
returnfirstname;
publicvoidsetFirstname(Stringfirstname){
this.firstname=firstname;
publicStringgetLastname(){
returnlastname;
publicvoidsetLastname(Stringlastname){
this.lastname=lastname;
publicPhoneNumbergetPhone(){
returnphone;
publicvoidsetPhone(PhoneNumberphone){
this.phone=phone;
publicPhoneNumbergetFax(){
returnfax;
publicvoidsetFax(PhoneNumberfax){
this.fax=fax;
}
PhoneNumber.java
publicclassPhoneNumber{
privateintcode;
privateStringnumber;
publicPhoneNumber(intcode,Stringnumber){
this.code=code;
this.number=number;
publicintgetCode(){
returncode;
publicvoidsetCode(intcode){
publicStringgetNumber(){
returnnumber;
publicvoidsetNumber(Stringnumber){
以上是两个很普通的Java对象。
下面将写测试代码,将一个Person对象转成xml;
然后再从xml转成Java对象。
在cn包下面建立一个Main.java,代码如下:
importcom.thoughtworks.xstream.XStream;
publicclassMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
XStreamxstream=newXStream();
xstream.alias("
person"
Person.class);
phonenumber"
PhoneNumber.class);
Personjoe=newPerson("
Joe"
"
Walnes"
);
joe.setPhone(newPhoneNumber(123,"
1234-456"
));
joe.setFax(newPhoneNumber(123,"
9999-999"
Stringxml=xstream.toXML(joe);
System.out.println(xml);
PersonnewJoe=(Person)xstream.fromXML(xml);
System.out.println(newJoe.getFirstname());
3.3运行测试类
运行上面的Main.java类,输出结果如下:
3.4代码解析
下面主要对Main.java中的main方法进行详细地解析.
XStreamxstream=newXStream();
直接实例化一个XStream对象,不用任何参数。
这个时候XSteam内部会使用KXml2的解析工具。
也就是上面添加的r包。
如果不需要使用这个包的话,可以用JAXP的包等。
例如:
XStreamxstream=newXStream(newDomDriver());
XStreamxstream=newXStream(newStaxDriver());
继续下面的代码:
xstream.alias("
这两句表示对于xml中的每个结点,所映射的Java类。
也就是person结点映射到了Person类;
而phonenumber则映射到了PhoneNumber类。
下面是实例化对象之类的,比较简单,我们跳过去不将。
直接进入:
Stringxml=xstream.toXML(joe);
这个就是核心所在,即将一个java对象转成了xml。
PersonnewJoe=(Person)xstream.fromXML(xml);
这个也是核心所在,将一个xml转成java对象。
4Alias机制
XStream的Alias功能是很强大的,也是XStream开发中不可或缺的一个重点功能,下面将通过一些实例来讲解如何应用Alias机制
4.1默认情况,不使用Alias
4.1.1新建相关的java对象类
分别新建下面的类
packagecom.thoughtworks.xstream;
importjava.util.ArrayList;
importjava.util.List;
publicclassBlog{
privateAuthorwriter;
privateListentries=newArrayList();
publicBlog(Authorwriter){
this.writer=writer;
publicvoidadd(Entryentry){
entries.add(entry);
publicListgetContent(){
returnentries;
publicclassAuthor{
privateStringname;
publicAuthor(Stringname){
this.name=name;
publicStringgetName(){
returnname;
publicclassEntry{
privateStringtitle;
privateStringdescription;
publicEntry(Stringtitle,Stringdescription){
this.title=title;
this.description=description;
4.1.2建立测试代码
如下:
BlogteamBlog=newBlog(newAuthor("
GuilhermeSilveira"
teamBlog.add(newEntry("
first"
Myfirstblogentry."
tutorial"
"
Todaywehavedevelopedanicealiastutorial.Tellyourfriends!
NOW!
"
System.out.println(xstream.toXML(teamBlog));
运行这个主函数,输出结果如下:
<
com.thoughtworks.xstream.Blog>
<
writer>
name>
GuilhermeSilveira<
/name>
/writer>
entries>
com.thoughtworks.xstream.Entry>
title>
first<
/title>
description>
Myfirstblogentry.<
/description>
/com.thoughtworks.xstream.Entry>
tutorial<
/entries>
/com.thoughtworks.xstream.Blog>
4.1.3分析
从这个例子看到,如果没有使用任何Alias的话,输出的XML中包含了类的全路径,包含package和class的名称。
这一般来说,不是我们想要的结果,可能我们想要的结果是如下:
blog>
entry>
/entry>
/blog>
4.2对class进行alias
修改上面的主函数,增加alias,如下:
blog"
Blog.class);
author"
Author.class);
entry"
Entry.class);
运行,输出结果如下:
4.3对field进行alias
从4.2中可以看到,我们可以对Class进行alias。
Xstream除了可以对Class进行alias外,还可以对field进行alias。
修改上述的main函数,如下:
xstream.aliasField("
Blog.class,"
writer"
运行上面结果,输出如下:
author>
/author>
4.4隐含的Collections
像上述中的xml,可以看到这个结点:
……
假如我们不需要其中这个结点,也就是想把<
结点去除,那么就可以使用其implicitcollection功能。
修改main函数,如下:
xstream.addImplicitCollection(Blog.class,"
entries"
运行上面函数,输出结果如下:
4.5对package进行alias
XStream另外一个功能是对package进行alias,虽然这个功能比较少用。
xstream.aliasPackage("
pany"
com.thoughtworks"
运行以上结果,输出如下:
pany.xstream.Blog>
pany.xstream.Entry>
/pany.xstream.Entry>
/pany.xstream.Blog>
5Converter机制
XStream提供了Converter,使我们在object<
->
xml时,能对一些输入输出参数进行类型转换。
5.1简单介绍
从上面的xml中看到,blog中有author子结点,看起来比较啰嗦,可能我们想把author子节点作为blog的属性,如下:
blogauthor="
>
那么就需要用到属性转换功能。
增加AuthorConverter.java,代码如下:
importcom.thoughtworks.xstream.converters.SingleValueConverter;
classAuthorConverterimplementsSingleValueCon