java xstream xml转对象_XStream:java对象与XML的相互转换

XStream是一个将java对象和XML进行相互转换的工具。

准备工作:

导入两个jar包:

xstream-1.4.jar

下载地址

xmlpull-xpp3-1.1.4c.jar

下载地址

具体实例代码:

Person.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23/**Person.java**/

package com.dingsheng.test;

import java.util.List;

public class Person {

private String name;

private String age;

private Profile profile;

private List

addlist;

public Person(String name, String age, Profile profile,List

addlist) {

this.name = name;

this.age = age;

this.profile = profile;

this.addlist = addlist;

}

public String toString() {

return "Person{" +

"name='" + name + ''' +

", age='" + age + ''' +

", profile=" + profile +

", addlist=" + addlist +

'}';

}

}

Address.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16/**Address.java**/

package com.dingsheng.test;

public class Address {

private String add;

private String zipcode;

public Address(String add, String zipcode) {

this.add = add;

this.zipcode = zipcode;

}

public String toString() {

return "Address{" +

"add='" + add + ''' +

", zipcode='" + zipcode + ''' +

'}';

}

}

Profile.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19/**Profile.java**/

package com.dingsheng.test;

public class Profile {

private String job;

private String tel;

private String remark;

public Profile(String job, String tel, String remark) {

this.job = job;

this.tel = tel;

this.remark = remark;

}

public String toString() {

return "Profile{" +

"job='" + job + ''' +

", tel='" + tel + ''' +

", remark='" + remark + ''' +

'}';

}

}

TestXStream.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62/**TestXStream.java**/

package com.dingsheng.test;

import java.util.ArrayList;

import java.util.List;

import com.thoughtworks.xstream.XStream;

public class TestXStream {

public static void main(String[] args) {

test();

}

public static void test() {

System.out.println("----------XStream学习-------------");

Address address1 = new Address("aaa", "bbb");

Address address2 = new Address("ccc", "ddd");

List

addlist = new ArrayList
();

addlist.add(address1);

addlist.add(address2);

Profile profile = new Profile("111", "222", "333");

Person person = new Person("eee", "fff", profile, addlist);

//转换装配

XStream xStream = new XStream();

/*设置类别名

* 格式: alias("修改后的别名",类的类型);*/

xStream.alias("PROFILE", Profile.class);

xStream.alias("PERSON", Person.class);

xStream.alias("ADDRESS", Address.class);

output(1, xStream, person);

/*设置类成员别名

* 格式: aliasField("修改后的别名",类的类型,"类成员名");*/

xStream.aliasField("NAME", Person.class, "name");

xStream.aliasField("Profile", Person.class, "profile");

xStream.aliasField("ADDLIST", Person.class, "addlist");

xStream.aliasField("ADD", Address.class, "add");

xStream.aliasField("ZIPCODE", Address.class, "zipcode");

output(2, xStream, person);

/*设置类成员为XML一个元素上的属性,并设置属性别名

* 格式: useAttributeFor(类的类型,"类成员名称");

* aliasAttribute(类的类型,"类成员名称","修改后的别名");*/

xStream.useAttributeFor(Profile.class, "job");

xStream.aliasAttribute(Profile.class, "job", "JOB");

output(3, xStream, person);

//将xml转为java对象

String xml = xStream.toXML(person);

System.out.println(xStream.fromXML(xml).toString());

}

public static void output(int i, XStream xStream, Object obj) {

String xml = xStream.toXML(obj);

System.out.println("第" + "[" + i + "]次输出n");

System.out.println(xml + "n");

}

}

运行结果:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61----------XStream学习-------------

第[1]次输出

eee

fff

此处名称没有变化,是因为profile是Person的一个类成员

111

222

333

aaa

bbb

ccc

ddd

第[2]次输出

eee

fff

111

222

333

aaa

bbb

ccc

ddd

第[3]次输出

eee

fff

222

333

aaa

bbb

ccc

ddd

Person{name='eee', age='fff', profile=Profile{job = '111',tel = 222',remark = 333'}, addlist=[Address{add = 'aaa',zipcode = 'bbb'}, Address{add = 'ccc',zipcode = 'ddd'}]}

错误信息:

在实际学习过程中出现的多种原因造成的多种错误,记录如下:出现错误:

java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException

没有发现类定义

原因:前期已经导入xstream-1.4.jar包,此处错误是没有导入xmlpull.jar包引起的,下载并导入该jar包后错误消失。在xml转java对象时出现错误:Exception in thread “main” java.lang.NoSuchMethodError: org.xmlpull.v1.XmlPullParserFactory.newInstance(Ljava/lang/String;Ljava/lang/Class;)Lorg/xmlpull/v1/XmlPullParserFactory;at com.thoughtworks.xstream.io.xml.XppDriver.createParser(XppDriver.java:57),具体原因还是jar包引起的,原来导入的是xmlpull_1_0_5.jar,换成xmlpull-1.1.3.1.jar后又出现错误Exception in thread “main” com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:60),最后换成了xmlpull-xpp3-1.1.4c.jar,问题才解决。

总结:jar包的重要性

XStream的几个方法的应用:设置类别名

格式:1alias("修改后的别名",类的类型);

设置类成员别名

格式:1aliasField("修改后的别名",类的类型,"类成员名");

设置类成员为XML一个元素上的属性,并设置属性别名

格式:1

2useAttributeFor(类的类型,"类成员名称");

aliasAttribute(类的类型,"类成员名称","修改后的别名");

将xml转为java对象1String xml = xStream.toXML(person);

注意设置类别名和类成员别名的区别,尤其是在一个类是另一个类的成员的情况下,如前面代码中的Profile类就是Person类的一个成员。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值