XStream是一个将java对象和XML进行相互转换的工具。
学习时的参考网址:http://lavasoft.blog.51cto.com/62575/78437/
准备工作:
导入两个jar包:
xstream-1.4.jar
下载地址
xmlpull-xpp3-1.1.4c.jar
下载地址
具体实例代码:
Person.java1
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<Address> addlist;
public Person(String name, String age, Profile profile,List<Address> 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.java1
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.java1
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.java1
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<Address> addlist = new ArrayList<Address>();
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 | ----------XStream学习------------- |
错误信息:
在实际学习过程中出现的多种原因造成的多种错误,记录如下:
- 出现错误:
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的几个方法的应用:
设置类别名
格式:1
alias("修改后的别名",类的类型);
设置类成员别名
格式:1
aliasField("修改后的别名",类的类型,"类成员名");
设置类成员为XML一个元素上的属性,并设置属性别名
格式:1
2useAttributeFor(类的类型,"类成员名称");
aliasAttribute(类的类型,"类成员名称","修改后的别名");将xml转为java对象
1
String xml = xStream.toXML(person);
注意设置类别名和类成员别名的区别,尤其是在一个类是另一个类的成员的情况下,如前面代码中的Profile类就是Person类的一个成员。