1. 创建一个对象用来转换为XML(可以是一个复杂对象—即对象中含有对象)
需要在主对象前加上注解@XmlRootElement,否则会报错
项目编码需使用UTF-8,都则中文乱码
对象中需要有构造器(有参、无参)
主对象:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement //注解必须加上
public class Student {
private int id;
private String name;
private String sex;
private int age;
private Classroom classroom;
public Student() {
super();
}
public Student(String name, String sex, int age, Classroom classroom) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.classroom = classroom;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Classroom getClassroom() {
return classroom;
}
public void setClassroom(Classroom classroom) {
this.classroom = classroom;
}
}
从对象:
public class Classroom {
private String great;
private String year;
private String diaplay;
public Classroom() {
super();
// TODO Auto-generated constructor stub
}
public Classroom(String great, String year, String diaplay) {
super();
this.great = great;
this.year = year;
this.diaplay = diaplay;
}
public String getGreat() {
return great;
}
public void setGreat(String great) {
this.great = great;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getDiaplay() {
return diaplay;
}
public void setDiaplay(String diaplay) {
this.diaplay = diaplay;
}
}
2. 测试类
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.dolo.domain.Classroom;
import com.dolo.domain.Student;
public class Test {
@org.junit.Test
public void test01(){
try {
JAXBContext jaxb = JAXBContext.newInstance(Student.class);
Marshaller mar = jaxb.createMarshaller();//创建Marshaller编译
Student student = new Student("dolo","张三",24,new Classroom("2014-02班","2014","计算机系"));
//marshal方法参数(Obj,文件或输出流)
mar.marshal(student, System.out);
//得到结果为:
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><student><age>24</age><classroom><diaplay>计算机系</diaplay><great>2014-02班</great><year>2014</year></classroom><name>dolo</name><sex>张三</sex></student>";
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@org.junit.Test
public void test02(){
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><student><age>24</age><classroom><diaplay>计算机系</diaplay><great>2014-02班</great><year>2014</year></classroom><name>dolo</name><sex>张三</sex></student>";
try {
JAXBContext jaxb = JAXBContext.newInstance(Student.class);
Unmarshaller ummar = jaxb.createUnmarshaller();//创建Marshaller反编译
//unmarshal方法参数(输入流)
Student student = (Student)ummar.unmarshal(new StringReader(xml));
System.out.println(student.getName()+"--"+student.getClassroom().getDiaplay());
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}