您的位置:首页 > 其它

XStream -- 非常简单实用的XML读写工具(一)

2010-05-24 19:05 393 查看
最近工作内容需要对Java对象做XML输出,公司里常用的两种框架是XStream和XML Beans。两种都我都用了,对于普通的,schema不是很复杂的XML文件来说选择XStream更方便。这篇文章先介绍一下XStream的用法,XML Beans的用法另外再介绍。

 

1. 先给个要输出的xml文档的例子:

 

<students>
<student>
<name>Peter</name>
<id>1001</id>
<age>15</age>
<student>
<student>
<name>Mike</name>
<id>1002</id>
<age>16</age>
<student>
<students>


 

 

2. 首先定义两个类:Students和Student,其中Students有一个List<Student>,Student有三个Field:name,id,age

 

]public class Students {

List studentList;

public Students() {
studentList = new ArrayList();
}

public void addStudent(Student p) {
studentList.add(p);
}
}


 

public class Student {

private String name, id, age;

public Student(String name, String id, String age){
this.name = name;
this.id = id;
this.age = age;
}

//Setter and Getter for name, id, age
......
}


 

3. 使用XStream将Object写入XML:

 

//XStream实例
XStream xStream = new XStream();

//定义xml的根节点"Students"
Students root = new Students();

//定义根节点的两个子节点"Student"
Student peter = new Student("peter", "1001", "15");
Student mike = new Student("mike", "1002", "16");

//添加到根节点上
root.addStudent(peter);
root.addStudent(mike);

//
System.out.println(xStream.toXML(root));


 

4. 输出的结果和我们的期待的并不完全一样:

 

<de.dexin.student.Students>
<studentList>
<de.dexin.student.Student>
<name>peter</name>
<id>1001</id>
<age>15</age>
</de.dexin.student.Student>
<de.dexin.student.Student>
<name>mike</name>
<id>1002</id>
<age>16</age>
</de.dexin.student.Student>
</studentList>
</de.dexin.student.Students>


 

如何将类节点名前面的路径名和多出来的节点"studentList"去掉,需要用到XStream提供的几个简单方法:

 

//Students类的别名
xStream.alias("students", Students.class);
//Student类的别名
xStream.alias("student", Student.class);
//不显示studentList节点
xStream.addImplicitCollection(Students.class, "studentList");


 

XStream还提供给aliasAttribute(Class, String, String) 和 aliasField(String, Class, String) 给类成员命名别名。

 

4. 将Field定义为XML节点的属性:比如如果我们想将节点"id"变为student的属性,通过设置xStream也可以很方便实现,而不需要修改类。

 

xStream.useAttributeFor(Student.class, "id");


 

最终我们的XML文档输出如下:

 

<students>
<student id="1001">
<name>peter</name>
<age>15</age>
</student>
<student id="1002">
<name>mike</name>
<age>16</age>
</student>
</students>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息