最近要用到XML和VO的转换,花半天研究了下XStream记录一下结果。
首先是例子entity类 Person;
package com.xstream.entity
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.ArrayList;
import java.util.List;
/**
* User: Rojer
* Date: 12-3-1
* Time: 下午4:58
* To change this template use File | Settings | File Templates.
*/
//设置Person类在xml中的别名
@XStreamAlias("person")
public class Person {
//将name设置为XML person 元素的 attribute
@XStreamAsAttribute()
private String name;
private int phoneNuber;
//将此字段名在XML中去掉
@XStreamImplicit()
private List<Address> addresses = new ArrayList<Address>();
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPhoneNuber() {
return phoneNuber;
}
public void setPhoneNuber(int phoneNuber) {
this.phoneNuber = phoneNuber;
}
}
Adress
package com.xstream.entity;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
* User: Rojer
* Date: 12-3-1
* Time: 下午5:00
* To change this template use File | Settings | File Templates.
*/
@XStreamAlias("address")
public class Address {
private String street;
private int houseNo;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public int getHouseNo() {
return houseNo;
}
public void setHouseNo(int houseNo) {
this.houseNo = houseNo;
}
}
测试类
package com.xstream.test;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.io.xml.Dom4JDriver;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import com.xstream.entity.Address;
import com.xstream.entity.Person;
import org.xmlpull.mxp1.MXParser;
import java.io.ObjectInputStream;
import java.io.StringReader;
/**
* User: Rojer
* Date: 12-3-1
* Time: 下午4:48
* To change this template use File | Settings | File Templates.
*/
public class TestStream {
public static void main(String[] args) {
String res=toXML();
toEntity(res);
}
public static void toEntity(String inputXML){
XStream xs = new XStream();
// 这句和@XStreamAlias("person")等效
// xs.alias("person",Person.class);
// xs.alias("address",Address.class);
xs.setMode(XStream.NO_REFERENCES);
// 这句和@XStreamImplicit()等效
// xs.addImplicitCollection(Person.class,"addresses");
// 这句和@XStreamAsAttribute()
// xs.useAttributeFor(Person.class, "name");
//注册使用了注解的VO
xs.processAnnotations(new Class[]{Person.class,Address.class});
Person person = (Person)xs.fromXML(inputXML);
System.out.println(person.getAddresses().get(0).getHouseNo()+person.getName());
}
public static String toXML(){
XStream xStream = new XStream();
Person person = new Person();
person.setName("rojer");
person.setPhoneNuber(999);
Address address1 = new Address();
address1.setHouseNo(888);
address1.setStreet("newyork");
Address address2 = new Address();
address2.setHouseNo(76767);
address2.setStreet("toyo");
person.getAddresses().add(address1);
person.getAddresses().add(address2);
// xStream.alias("person", Person.class);
// xStream.alias("address",Address.class);
xStream.setMode(XStream.NO_REFERENCES);
// xStream.addImplicitCollection(Person.class, "addresses");
// xStream.useAttributeFor(Person.class,"name");
//注册使用了注解的VO
xStream.processAnnotations(new Class[]{Person.class,Address.class});
String xml = xStream.toXML(person);
System.out.println(xml);
return xml;
}
}
测试结果如下
<person name="rojer">
<phoneNuber>999</phoneNuber>
<address>
<street>newyork</street>
<houseNo>888</houseNo>
</address>
<address>
<street>toyo</street>
<houseNo>76767</houseNo>
</address>
</person>
888rojer
如果去掉Person类的@XStreamImplicit()注解,生成的XML如下
<person name="rojer">
<phoneNuber>999</phoneNuber>
<addresses>
<address>
<street>newyork</street>
<houseNo>888</houseNo>
</address>
<address>
<street>toyo</street>
<houseNo>76767</houseNo>
</address>
</addresses>
</person>
888rojer
其字段addresses 会被写入到XML中。
分享到:
相关推荐
使用xstream进行java类与xml文件互转解析
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...
Xstream_java对象和xml的互相转换
这个是 对于要把数据库获得的 list 转换成 xml 有了XStream在Java对象和XML之间相互转换 就变得非常容易了 嘿嘿
xstream轻松解析xml到java对象,内附样例。so easy!妈妈再也不用担心我的xml解析。
一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换
博客连接 http://blog.csdn.net/zgf1991/article/details/7894427 使用XStream, java Object 与xml之间的转换,以及写入SD卡
xstream-1.3.1.jar javabean与xml之间的转化,实现转化
XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...
webService接口对接时,需要传递一个xml内容。用xStream拼接xml
好用的xStream XML和JAVA对象互相转换的简单示例,内附依赖的xstream-1.3.1.jar和xpp3_min-1.1.4c.jar
XStream组件进行Object与XML互转用法 1.所需求jar包: xstream-1.3.1.jar 2.如果仅进行OBJECT与XML之间互转只需要这一个jar 包及XStream这一个类就可又了 用法说明: 1.OBJECT 转XML //第一步:准备好要进行XML...
有jar包。在附件。全的,代码也有,,直接运行
Xstream生产xml和解析xml
Java对象转换成XML字符串 将List集合转换成xml文档 Map集合转换xml文档 用InputStream将XML文档转换成java对象
XStream测试Demo-xml与java对象的相互转换
使用xstream技术进行类与xml相互转换,简单的应用,快速上手。
xStream可以轻易的将Java对象和xml文档相互转换,本实例详细介绍了运用xStream将对象转xml和xml转对象操作.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.20 实体类和测试类详见博客 ...