您的位置:首页 > 编程语言 > Java开发

xstream java 转换为xml

2013-09-22 09:55 183 查看
XStream是个很强大的工具,能将java对象和xml之间相互转化。xstream不在意java类中成员变量是私有还是公有,也不在乎是否有默认构造函数。它调用方式也非常简单:从xml对象转化为java对象,使用fromXML()方法;从java对象序列化为xml,toXML()即可,很方便。xstream也支持注解方式,这些都是为了简化输出而设计,下面为大家简单说一下这几个注解的含义和用法。

1. 当没有任何注解情况下

[java] view
plaincopy

public class Cat {

//名字

private String name;

//大小

private Integer age;

//玩具球 球具有颜色属性

private List<Ball> balls;

Cat(String name,Integer age,List<Ball> balls){

this.name = name;

this.age = age;

this.balls=balls;

}

//getter/setter方法 为了赋值使用

其中Ball定义如下:

[java] view
plaincopy

public class Ball {

//颜色

private String color;

Ball(String color){

this.color = color;

}

没有任何注解,输出如下:

[java] view
plaincopy

public static void main(String[] args) throws Exception{

//初始化cat

List<Ball> balls = new ArrayList<Ball>();

balls.add(new Ball("red"));

Cat cat = new Cat("馄饨",1,balls);

//初始化结束

//为了方便查找 将文件制定到D盘cat.xml中

FileOutputStream fout = new FileOutputStream("D:/cat.xml");

XStream xs = new XStream();

xs.toXML(cat,fout);

}<span style="font-size:14px;">

</span>

得到Cat.xml如下

[java] view
plaincopy

<com.timejob.node.Cat>

<name>馄饨</name>

<age>1</age>

<balls>

<com.timejob.node.Ball>

<color>red</color>

</com.timejob.node.Ball>

</balls>

</com.timejob.node.Cat>

1. @XStreamAlias("cat") 等同于 xstream.alias("cat", Cat.class);

[java] view
plaincopy

@XStreamAlias("cat") //here

public class Cat {

//名字

private String name;

//大小

private Integer age;

//玩具球 球具有颜色属性

private List<Ball> balls;

我们需要明确给出,哪个类的注解需要被激活:

[java] view
plaincopy

public static void main(String[] args) throws Exception{

//初始化cat

List<Ball> balls = new ArrayList<Ball>();

balls.add(new Ball("red"));

Cat cat = new Cat("馄饨",1,balls);

//初始化结束

//为了方便查找 将文件制定到D盘cat.xml中

FileOutputStream fout = new FileOutputStream("D:/cat.xml");

XStream xs = new XStream();

//xs.alias("cat", Cat.class); //等同于 @XStreamAlias("cat")

xs.processAnnotations(Cat.class);//将Cat.class类上的注解将会使用

xs.toXML(cat,fout);

}

当我们在Cat类名使用该注解时,表明该类序列化为xml时,类名com.timejob.node.Cat将替换成cat输出,这样使得xml更清晰简短:

[java] view
plaincopy

<cat>

<name>馄饨</name>

<age>1</age>

<balls>

<com.timejob.node.Ball>

<color>red</color>

</com.timejob.node.Ball>

</balls>

</cat>

2. XStreamAsAttribute 作用是将类内成员作为父节点属性输出,等同于xstream.useAttributeFor(Cat.class, "name")

[java] view
plaincopy

@XStreamAlias("cat")

public class Cat {

//名字

@XStreamAsAttribute // here 将name作为Cat属性输出在父节点

private String name;

//大小

private Integer age;

//玩具球 球具有颜色属性

private List<Ball> balls;

其他代码保持不变,输出后cat.xml如下:

[java] view
plaincopy

<cat name="馄饨">

<age>1</age>

<balls>

<com.timejob.node.Ball>

<color>red</color>

</com.timejob.node.Ball>

</balls>

</cat>

我们看到name属性已经作为 cat的属性输出在根节点上

3. @XStreamAlias 作用就是将属性按照别名输出,等同于xstream.aliasField("catAge", Cat.class, "age");

[java] view
plaincopy

@XStreamAlias("cat")

public class Cat {

//名字

@XStreamAsAttribute

private String name;

//大小

@XStreamAlias("catAge") //here

private Integer age;

//玩具球 球具有颜色属性

private List<Ball> balls;

得到cat.xml文件如下:

[java] view
plaincopy

<cat name="馄饨">

<catAge>1</catAge>

<balls>

<com.timejob.node.Ball>

<color>red</color>

</com.timejob.node.Ball>

</balls>

</cat>

4.对于集合常用的注解 @XStreamImplicit 去除<Balls></Balls>显示,只显示之间的<Ball></Ball>节点元素

[java] view
plaincopy

@XStreamAlias("cat")

public class Cat {

//名字

@XStreamAsAttribute

private String name;

//大小

@XStreamAlias("catAge")

private Integer age;

//玩具球 球具有颜色属性

@XStreamImplicit //here

private List<Ball> balls;

此时输出如下:

[java] view
plaincopy

<cat name="馄饨">

<catAge>1</catAge>

<com.timejob.node.Ball>

<color>red</color>

</com.timejob.node.Ball>

</cat>

这样看起来就更加简洁了。

4.还有几个注解,都是比较好理解的,如@XStreamOmitField 表明该属性不会被序列化到xml中。

[java] view
plaincopy

@XStreamAlias("cat")

public class Cat {

//名字

@XStreamAsAttribute

private String name;

//大小

@XStreamAlias("catAge")

private Integer age;

//玩具球 球具有颜色属性

@XStreamImplicit

private List<Ball> balls;

@XStreamOmitField //here

private String noCare;

常用的就这么几个,其他的再讨论和学习吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: