XStream实用指南
壹、快速上手
1.1 创建序列化的类
public class Person { } public class PhoneNumber { } |
注意:
请注意上面两个类的字段都是私有的,XStream并不关心字段的可见性,没有getter/setter也没关系,也不要求具有默认的构造函数。
1.2 初始化XStream
|
XStream xstream = new XStream(new DomDriver()); // does not require XPP3 library |
现在,你可以对自定义的类名创建别名以对应生成的XML元素名称更加简洁,这是使用Xstream过程中唯一需要映射的,并且这是可选的。
xstream.alias("person", Person.class); xstream.alias("phonenumber", PhoneNumber.class); |
1.3 序列化对象至XML
Person joe = new Person("Joe", "Walnes"); joe.setPhone(new PhoneNumber(123, "1234-456")); joe.setFax(new PhoneNumber(123, "9999-999")); |
String xml = xstream.toXML(joe); |
<person> <firstname>Joe</firstname> </person> |
1.4 从XML反序列化至对象
Person newJoe = (Person)xstream.fromXML(xml); |
1.5 快速上手小结
(1) xstream.alias(String elementName, Class cls);
(2) xstream.toXML(Object obj);
(3) xstream.fromXML(String xml);
贰、使用别名
2.1 类别名
显然,这种方式所生成的XML不够简洁,也不利于人工阅读,所以XStream给我们提供了类别名来解决这一问题,
xstream.alias(String 类别名, Class 类定义); |
如:我们使用如下代码将Person类定义别名
xstream.alias(“person”, Person.class);
这样我们生成的XML字符串就会变成<person>…</person>;
注意:
2.2 字段别名
aliasField(String 字段别名, Class 类定义, String 字段名); |
如Person类有字段firstName,我们想在生成的XML中将此字段名改为first,则我们可以使用如下代码:
xstream.aliasField("first", Person.class, "firstName");
则生成的XML为:<Person><first>...</first>...
2.3 属性别名
|
aliasAttribute(Class 类定义, String 属性名, String 属性别名); |
<Person FirstName=”xusweeter”>。。。
注意:
useAttributeFor(Class 类定义, String 字段名); |
2.4 包别名
aliasPackage(String name, String pkgName) |
叁、集合说明
public void add(String article){
}
我们创建一个Blog对象,并填充它的字段。
Blog blog = new Blog();
blog.add("chapter1");
blog.add("chapter2");
将此对象序列化为XML:
XStream xstream = new XStream();
System.out.println(xstream.toXML(blog));
我们将会得到如下XML:
<collection.Blog>
</collection.Blog>
着色的部分就是集合字段生成的XML,所以我们看到有重复的相同标签的XML元素就应当和集合建立联系,实验证明使用代码:
Blog blog1 = (Blog)xstream.fromXML(xstream.toXML(blog));
可以将上述生成的XML反向序列化为Blog对象。
3.1 隐含集合:
另外,XStream类为我们提供了另外一个方法:
addImplicitCollection(Class ownerType, String fieldName) |
</collection.Blog>
肆、对象引用
XStream的模式:
l
XStream.XPATH_RELATIVE_REFERENCES
(默认)
默认的引用方式,通过XPath的相对位置来引用
l
XStream.XPATH_ABSOLUTE_REFERENCES
绝对引用方式
l
XStream.ID_REFERENCES
ID
引用方式,通过对元素编号来引用
l
XStream.NO_REFERENCES
无引用方式
List order = new ArrayList();
order.add(bj);
order.add(bj);
order.add(order);
一个集合order,连续两次添加了同一个对象,最后又把自身添加进去,详细的类定义见官网“Object References”章节。
4.1 XPath相对引用
XStream在默认的情况下是以XPATH_RELATIVE_REFERENCES模式来表示对象间的引用关系。
XStream xstream = new XStream();
System.out.println(xstream.toXML(order));
生成的XML结果如下:
<list>
</list>
请注意上面着色和加粗部分的引用是以自身和目标的相对关系来引用的。
4.2 XPath绝对引用
<span style