`
cjc
  • 浏览: 658244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用xstream处理java中的集合类

阅读更多
利用xstream处理java中的集合类
越来越发现xstream的好用了,在处理很多麻烦事情时可以很简单的搞定,比如本来需要几个字段来保存的服务器配置信息,现在只需要写一个pojo表示服务器的config information,然后利用xstream将它变为xml,用一个字段就可以保存在数据库中,方便而且高效。
但是在工作中,发现有时候pojo中需要用到java中的集合类,如ArrayList时,稍微有那么一点麻烦,今天特总结了一下,有不对之处希望大家批评指正。
一.pojo中使用数组
1.先写一个表示通许录的pojo
packagechb.xml;

/***//**通讯录
*
@authorchb
*
*/

publicclassAdressList...{
Stringusername;
//用户名
String[]telphone;//联系方式
publicString[]getTelphone()...{
returntelphone;
}

publicvoidsetTelphone(String[]telphone)...{
this.telphone=telphone;
}

publicStringgetUsername()...{
returnusername;
}

publicvoidsetUsername(Stringusername)...{
this.username=username;
}

}
2.利用xstream将一个AdressList对象转化成xml
XStreamxstream=newXStream(newDomDriver());
AdressListadressList
=newAdressList();
adressList.setUsername(
"chb");
String[]tel
=...{"13811071xxx","0391-6792xxx"};
adressList.setTelphone(tel);
Stringobj_xml
=xstream.toXML(adressList);
System.out.println(obj_xml);
3.输出结果为:
<chb.xml.AdressList>
<username>chb</username>
<telphone>
<string>13811071xxx</string>
<string>0391-6792xxx</string>
</telphone>
</chb.xml.AdressList>
4.如果觉得上面这段xml的root节点<
chb.xml.AdressList>不爽的话,可以利用xstream的annotations来搞定。只需要改动两个地方即可:

packagechb.xml;

importcom.thoughtworks.xstream.annotations.XStreamAlias;

/***//**通讯录
*
@authorchb
*
*/

@XStreamAlias(
"adressList")
publicclassAdressList...{
Stringusername;
//用户名
String[]telphone;//联系方式
然后在调用时更改如下:
XStreamxstream=newXStream(newDomDriver());
Annotations.configureAliases(xstream,AdressList.
class);
AdressListadressList
=newAdressList();
adressList.setUsername(
"chb");
String[]tel
=...{"13811071xxx","0391-6792xxx"};
adressList.setTelphone(tel);
Stringobj_xml
=xstream.toXML(adressList);
System.out.println(obj_xml);
最后输出结果为:
<adressList>
<username>chb</username>
<telphone>
<string>13811071xxx</string>
<string>0391-6792xxx</string>
</telphone>
</adressList>
关于xstream的
Annotations用法可以参考:http://xstream.codehaus.org/annotations-tutorial.html
二.pojo中使用ArrayList,ArrayList中装着另外的一个pojo
1.创建一个pojo
packagechb.xml;

importjava.util.ArrayList;

importcom.thoughtworks.xstream.annotations.XStreamAlias;

/***//**通讯录
*
@authorchb
*
*/

@XStreamAlias(
"adressList")
publicclassAdressList...{
Stringusername;
//用户名
ArrayList<EmailAdress>emailList;//电子邮件
publicStringgetUsername()...{
returnusername;
}

publicvoidsetUsername(Stringusername)...{
this.username=username;
}

publicArrayList<EmailAdress>getEmailList()...{
returnemailList;
}

publicvoidsetEmailList(ArrayList<EmailAdress>emailList)...{
this.emailList=emailList;
}

}

2.emailList变量指向的EmailAdress对象为:
packagechb.xml;

importcom.thoughtworks.xstream.annotations.XStreamAlias;

/***//**有点类似于javax.mail.internet.InternetAddress
*
*如:chb<hbcui1984@163.com>
*
*
@authorchb
*
*/

@XStreamAlias(
"email")
publicclassEmailAdress...{

Stringperson;
//person

Stringadress;
//Adress

publicStringgetAdress()...{
returnadress;
}

publicvoidsetAdress(Stringadress)...{
this.adress=adress;
}

publicStringgetPerson()...{
returnperson;
}

publicvoidsetPerson(Stringperson)...{
this.person=person;
}

}

3.将一个
AdressList对象转化为对应的pojo
XStreamxstream=newXStream(newDomDriver());
Annotations.configureAliases(xstream,AdressList.
class);
Annotations.configureAliases(xstream,EmailAdress.
class);
AdressListadressList
=newAdressList();
adressList.setUsername(
"chb");

ArrayList
<EmailAdress>emailList=newArrayList<EmailAdress>();
for(inti=1;i<4;i++)...{
EmailAdressemail
=newEmailAdress();
email.setPerson(
"user"+i);
email.setAdress(
"user"+i+"@163.com");
emailList.add(email);
}

adressList.setEmailList(emailList);
Stringobj_xml
=xstream.toXML(adressList);
System.out.println(obj_xml);
4.输出结果为:
<adressList>
<username>chb</username>
<emailList>
<email>
<person>user1</person>
<adress>user1@163.com</adress>
</email>
<email>
<person>user2</person>
<adress>user2@163.com</adress>
</email>
<email>
<person>user3</person>
<adress>user3@163.com</adress>
</email>
</emailList>
</adressList>

三.用其他集合类的方法类似,这里就不举例了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics