JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
//通过JAXB将java对象转换为xml
public class JAXBDemo {
public static void main(String[] args) throws JAXBException {
//调用JAXB上下文,通过调用newInstance,详细可看javaee6的帮助文档
JAXBContext ctx = JAXBContext.newInstance(Student.class);
//创建一个marshaller(编排)
Marshaller mar = ctx.createMarshaller();
Student stu = new Student("student1", "123");
//转换对象,并将输入到标准流中
mar.marshal(stu, System.out);
}
}
//记得创建@XmlRootElement,如果不写name的属性,默认是类名的小写形式做为xml的root
@XmlRootElement(name="STUDENT")
class Student {
private String name;
private String password;
public Student(){}
public Student(String name, String password){
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
输出结果:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><STUDENT><name>student1</name><password>123</password></STUDENT>
package com.czp.test;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;
//通过xml,转换为java对象
public class JAXBDemo1 {
public static void main(String[] args) throws JAXBException {
//定义xml字符串
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
"<STUDENT><name>student1</name><password>123</password></STUDENT>";
//获取JAXContext对象,记得要写上实体类,不然会报找不到节点的错误
JAXBContext ctx = JAXBContext.newInstance(Student.class);
//创建反编排的对象
Unmarshaller unmar = ctx.createUnmarshaller();
//将字符串通过的流的形式反编排,并强制转换
Student stu = (Student)unmar.unmarshal(new StringReader(xml));
//打印结果值
System.out.println("name : " + stu.getName() +", password : " + stu.getPassword());
}
}
//name的属性值要和XML的root节点一样
@XmlRootElement(name="STUDENT")
class Student {
private String name;
private String password;
public Student(){}
public Student(String name, String password){
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
输出结果:name : student1, password : 123