在写这篇技术blog时,我参看了 http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html
也可以看看这篇,写的挺细的,我写了一个xml 到 bean. 和bean 到xml 转换的一个例子,
一来,作为成长的一个脚印,二来,总结一些代码,以后备用,在银行和保险方面,在接口的传送数据时,经常传送的是xml报文。
有的加密,有你的明文,都同样需要这样一个转换的功能。所以来写这篇blog,主要是自己看,如果,别的攻城师 看到这篇blog,
并学会了一些处理业务的方法,那是我的荣幸,我会非常的高兴。
一、准备工作
1、 下载jar包、及官方资源
xStream的jar下载地址:
官方的示例很全,官方参考示例:http://xstream.codehaus.org/tutorial.html
2、项目的整体截图:
3.1、分析:自己要创建一个xml 文件,格式:一个News下有多个school,一个school下有多个teacher,一个teacher下有多个student. 如图:
3.2、针对上述的xml报文解析成我们需要的对象。
4.编写拼写xml 报文的结构。
News.java
package com.test.picc.domain;
import java.util.ArrayList;
import java.util.List;
public class News {
private List<School> schools = new ArrayList<School>();
public List<School> getSchools() {
return schools;
}
public void setSchools(List<School> schools) {
this.schools = schools;
}
}
School.java
package com.test.picc.domain;
import java.util.ArrayList;
import java.util.List;
public class School {
private int id;
private String name;
private String address;
private List<Teacher> teachers= new ArrayList<Teacher>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
@Override
public String toString() {
return this.id + this.name;
}
}
Teacher.java
package com.test.picc.domain;
import java.util.ArrayList;
import java.util.List;
public class Teacher {
private int id ;
private String name;
private int age;
private List<Student> students = new ArrayList<Student>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return this.id+ this.name;
}
}
Student.java
package com.test.picc.domain;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注:按上边所需要的xml 报文结构编写java 代码。
BeanToXML.java
package com.test.picc;
import java.util.ArrayList;
import java.util.List;
import com.test.picc.domain.News;
import com.test.picc.domain.School;
import com.test.picc.domain.Student;
import com.test.picc.domain.Teacher;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class BeanToXml {
public static void main(String[] args) {
List<Student> stus = new ArrayList<Student>();
List<Student> stus1 = new ArrayList<Student>();
List<Teacher> teas = new ArrayList<Teacher>();
List<School> schools = new ArrayList<School>();
News new1 = new News();
new1.setSchools(schools);
School s1= new School();
s1.setId(1);
s1.setName("beijing school");
s1.setAddress("beijin");
s1.setTeachers(teas);
schools.add(s1);
Teacher t1 = new Teacher();
t1.setId(1);
t1.setAge(54);
t1.setName("zs");
t1.setStudents(stus);
Teacher t2 = new Teacher();
t2.setId(2);
t2.setAge(52);
t2.setName("ls");
t2.setStudents(stus1);
teas.add(t1);
teas.add(t2);
Student st1= new Student();
st1.setId(1);
st1.setName("student1");
Student st2= new Student();
st2.setId(1);
st2.setName("student2");
stus.add(st1);
stus.add(st2);
Student st3= new Student();
st3.setId(3);
st3.setName("student3");
Student st4= new Student();
st4.setId(1);
st4.setName("student4");
stus1.add(st3);
stus1.add(st4);
// System.out.println(s1.getTeachers().get(0));
XStream xstream = new XStream(new DomDriver());
xstream.aliasPackage("","com.test.picc.domain");
xstream.aliasField("姓名",Student.class, "name");
String xml = xstream.toXML(new1) ;
// System.out.println(xml);
/**
xstream.alias("com.test.picc.domain.News", News.class);
xstream.alias("school",School.class);
xstream.alias("teacher", Teacher.class);
xstream.alias("student", Student.class);
*
*/
String news= getXml(xml,"News");
News n1 = (News)xstream.fromXML(news);
List<School> schools1 = n1.getSchools();
for(School sch:schools1){
System.out.println(sch);
for(Teacher t:sch.getTeachers()){
System.out.println(t);
}
}
System.out.println();
}
/**
* 获取xml报文
* @param xml
* @param node
* @return
*/
public static String getXml(String xml, String node){
int startBodyValue = xml.indexOf("<" + node + ">");
if(startBodyValue<0){
return "";
}
if (xml != null && xml.length() > 0) {
xml = xml.substring(startBodyValue);
}
int indexBodyValue = xml.indexOf("</" + node + ">");
if(indexBodyValue<0){
return null;
}
if (xml != null && xml.length() > 0) {
xml = xml.substring(0, indexBodyValue);
}
xml = xml + "</" + node + ">";
return xml;
}
}
注:在
xstream.alias("com.test.picc.domain.News", News.class); 是为了方便xStream 的转换之用,如果一个类中只有一个News.class 就不用此项气操作。
结果:
demo 下载地址:http://download.youkuaiyun.com/detail/liuc0317/5389673