首先我封装了两个方法,XML—->JavaBean 和 JavaBean—->XML 之间的转换:
/** * 将 对象 转换成 xml * @param clazz 目标类 * @throws Exception 异常 */
public static void ObjectToXML(Object obj) throws Exception{
JAXBContext ctx = JAXBContext.newInstance(obj.getClass());//动态判定类型
Marshaller marchaller = ctx.createMarshaller();
marchaller.marshal(obj, System.out);
}
/** * 将 xml 转换成 对象 * @param obj 目标类型 * @param xmlStr xml字符串 * @throws Exception 异常 */
public static Object XMLToObject(Object obj,String xmlStr) throws Exception{
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Unmarshaller unmarshaller = context.createUnmarshaller();
Object object = unmarshaller.unmarshal(new StringReader(xmlStr));
return object;
}
测试程序:
public static void main(String[] args) throws Exception {
Student stu = new Student();
stu.setStuName("Bla");
stu.setScore(79);
stu.setAge("20");
stu.setDate(new Date());
//对象转换成xml
ObjectToXML(stu);
//将 xml 装换成 对象
String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><student><age>20</age><date>2015-12-07T19:49:52.236+08:00</date><score>79</score><stuName>Bla</stuName></student>";
System.out.println("将 xml 装换成 对象 \n");
Object xmlToObject = XMLToObject(new Student(), xmlStr);
String studentInfo = ((Student)xmlToObject).toString();
System.out.println(studentInfo);
}
测试程序需要的实体类:
注意:使用Java自带的转换有一点不好,就是实体类前面需要加 @XmlRootElement 注解
@XmlRootElement
public class Student {
private String stuName;
private String age;
private Date date;
private int score;
public Student() {
super();
}
public Student(String stuName, String age, Date date, int score) {
super();
this.stuName = stuName;
this.age = age;
this.date = date;
this.score = score;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [stuName=" + stuName + ", age=" + age + ", date=" + date + ", score=" + score + "]";
}
}