XStream使用笔记_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > XStream使用笔记

XStream使用笔记

 2013/11/2 18:19:02  headsen  程序员俱乐部  我要评论(0)
  • 摘要:官网:http://xstream.codehaus.org/官网上有很详细且简单易学的教程和实例。作者:Headsen日期:2013-11-2简单高效的XML和JavaBean转换工具。最核心的两个方法。XStreamxStream=newXStream();StringxmlStr=xStream.toXml(obj);Objectobj=xStream.fromXml(obj);1、对于一个类的空对象(所有属性不赋值),返回一个根节点的报文。属性为Null的属性不会生成节点
  • 标签:笔记 使用

?

官网:http://xstream.codehaus.org/

官网上有很详细且简单易学的教程和实例。

?

作者:Headsen

日期:2013-11-2

?

简单高效的XML和JavaBean转换工具。最核心的两个方法。

class="java">   XStream xStream = new XStream();
   String xmlStr = xStream.toXml(obj);
   Object obj = xStream.fromXml(obj);

?

1、对于一个类的空对象(所有属性不赋值),返回一个根节点的报文。属性为Null的属性不会生成节点。属性非null的空值(如空字符串、空数组)会生成空白节点。

?

2、如果不设置类的别名,报文的根节点为【包名+类名】,显的臃肿,如:“xxx.package.ClassName”。

?

3、所有的注解,都有对应的java方法。注解的好处就是简单,但是耦合。两种方式各有各的好处。使用注解时,要调用下面方法激活。

xStream.processAnnotations(Person.class);

?

4、如果要处理的对象,多个属性引用统一对象,那么生成的XML很多节点数据会相同。XStream默认使用reference来精简XML的大小。如:

	List order = new ArrayList();
	order.add(bj);
	order.add(bj);
	order.add(order);
	结果:
	<list>
	  <CD>
	    <id>Next Road Cross</id>
	  </CD>
	  <CD reference="../CD"/>
	  <list reference=".."/>
	</list>

? ? ? ?可以通过setModel设置引用模式。但是,在上述例子中,由于Order引用自己,不过不设置引用解析,则会抛出循环依赖错误

?

5、对于没有父(根)节点的XML报文,可以使用隐式集合。如:

xStream.addImplicitCollection(Person.class, "friends");

?

6、默认情况下,XStream会生成干净的XML。有时候为了生成配置文件,或可读性更好的XML,需要使用节点属性。

xStream.useAttributeFor(Person.class, "firstname");
<person firstname="Headsen"></person>

?

7、一些结构对象,想作为节点转换时,需要实现对应的Convertor。如:

/*
 * 联系方式类的转换器
 */
public class PhoneNumberConvertor implements SingleValueConverter {
    public boolean canConvert(Class type) {
        return type.equals(PhoneNumber.class);
    }
    public Object fromString(String number) {
        return new PhoneNumber(0, number);
    }
    public String toString(Object phone) {
        return ((PhoneNumber) phone).getCode() + "-" + ((PhoneNumber) phone).getNumber();
    }
}
xstream.registerConverter(new PhoneNumberConvertor());

结果:
<person lastname="Zhang" fax="111-412-4444">
</person>

?

8、有时候,不想某些属性生成在XML中,可使用以下方法:

xStream.omitField(Person.class, "firstname");

?

9、XStream还支持转换为JSON格式,只需注入合适的解析驱动即可。但是XStream并不建议这样做。JSON格式有很大的局限性,特别是表示一些稍微复杂的数据类型。

XStream xstream = new XStream(new JettisonMappedXmlDriver());

XStream很简单,简单的记一下。代码都没贴上来。这里有个不错的。

http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

?

发表评论
用户名: 匿名