200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

时间:2018-07-10 10:47:45

相关推荐

用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

Posted on -06-05 19:06 Stephen Wong 阅读(1224) 评论(0) 编辑 收藏 网摘 所属分类: 数据持久化、序列化 , WebService , Java

XStream 项目主页

/

需要 lib

xstream-1.2.2.jar

xpp3_min-1.1.3.4.O.jar

这是 .5.24 打包的 lib

测试主程序

package org.stephencat.test;

import com.thoughtworks.xstream. * ;

import java.util. * ;

/**

*测试XStream序列化和反序列化

* @author stephen.wjj

*

*/

public class XStreamTest{

/**

*测试序列化

*/

public static void TestSerializer(){

System.out.println( " =====Testingserializer===== " );

Personp1 = new Person();

p1.setName( " AAA " );

Personp2 = new Person();

p2.setName( " BBB " );

Personp3 = new Person();

p3.setName( " CCC " );

Groupg = new Group();

g.getPersons().add(p1);

g.getPersons().add(p2);

g.getPersons().add(p3);

g.setName( " KFC " );

XStreamxstream = new XStream();

// 声明标记名称对应的Java类

xstream.alias( " group " ,Group. class );

xstream.alias( " person " ,Person. class );

// 把Group的name属性视为XML属性

xstream.useAttributeFor(Group. class , " name " );

// 忽略XML中的<persons></persons>标记

xstream.addImplicitCollection(Group. class , " persons " );

System.out.println(xstream.toXML(g));

}

/**

*测试反序列化

*/

public static void TestDeserializer(){

System.out.println( " =====Testingdeserializer===== " );

Stringxml = " <groupname=/ " KFC/ " ><person><name>AAA</name></person><person><name>BBB</name></person><person><name>CCC</name></person></group> " ;

XStreamxstream = new XStream();

// 声明标记名称对应的Java类

xstream.alias( " group " ,Group. class );

xstream.alias( " person " ,Person. class );

// 把Group的name属性视为XML属性

xstream.useAttributeFor(Group. class , " name " );

// 忽略XML中的<persons></persons>标记

xstream.addImplicitCollection(Group. class , " persons " );

Groupg = (Group)xstream.fromXML(xml);

System.out.println( " Groupname= " + g.getName());

System.out.println( " Grouphaspersons= " + g.getPersons().size());

System.out.println( " Grouppersons: " );

if (g.getPersons().size() > 0 ){

Iteratorit = g.getPersons().iterator();

while (it.hasNext()){

Personp = (Person)it.next();

if (p != null ){

System.out.println(p.getName());

} else {

System.out.println( " Err!personinstanceisnull! " );

}

}

}

}

/**

* @param args

*/

public static void main(String[]args){

// TODOAuto-generatedmethodstub

TestSerializer();

TestDeserializer();

}

}

Console 输出

===== Testingserializer =====

<groupname = " KFC " >

<person>

<name>AAA</name>

</person>

<person>

<name>BBB</name>

</person>

<person>

<name>CCC</name>

</person>

</group>

===== Testingdeserializer =====

Groupname = KFC

Grouphaspersons = 3

Grouppersons:

AAA

BBB

CCC

注:

用于反序列化的字符串(String xml = "...")中带有 XML 头部时不会影响结果

<? xmlversion="1.0" ?>

用于序列化的实体类

Group

package org.stephencat.test;

import java.util. * ;

/**

*包含若干Person的Group

* @author stephen

*

*/

public class Group{

/**

*Group名称<br>

*需求规定这是XML中的一个属性

*/

private Stringname;

/**

*需求规定这是一堆若干数量的person标记

*/

private Listpersons = new ArrayList();

public StringgetName(){

return name;

}

public void setName(Stringname){

this .name = name;

}

public ListgetPersons(){

return persons;

}

public void setPersons(Listpersons){

this .persons = persons;

}

}

Person

package org.stephencat.test;

/**

*Group里面的Person

* @author stephen

*

*/

public class Person{

/**

*需求规定这是一个name标记

*/

private Stringname;

public StringgetName(){

return name;

}

public void setName(Stringname){

this .name = name;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。