下面使用的是JDK自帶的類,沒有引用任何第三方jar包。 java
Unmarshaller 類使客戶端應用程序可以將 XML 數據轉換爲 Java 內容對象樹。 框架
備註:marshal(序列化、排列、整理) 函數
Marshaller 類使客戶端應用程序可以將 Java 內容樹轉換回 XML 數據。 this
Java代碼
- package hb.jaxb;
-
- public class Classroom {
- private int id;
- private String name;
- private int grade;
-
- 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 getGrade() {
- return grade;
- }
-
- public void setGrade(int grade) {
- this.grade = grade;
- }
-
- public Classroom(int id, String name, int grade) {
- super();
- this.id = id;
- this.name = name;
- this.grade = grade;
- }
-
- public Classroom() {
- super();
- }
-
- }
Java代碼
- package hb.jaxb;
-
- import javax.xml.bind.annotation.XmlRootElement;
-
- @XmlRootElement
- public class Student {
- private int id;
- private String name;
- private int age;
- private Classroom classroom;
-
- 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 Classroom getClassroom() {
- return classroom;
- }
-
- public void setClassroom(Classroom classroom) {
- this.classroom = classroom;
- }
-
- public Student(int id, String name, int age, Classroom classroom) {
- super();
- this.id = id;
- this.name = name;
- this.age = age;
- this.classroom = classroom;
- }
-
- //無參夠着函數必定須要,不然JXBContext沒法正常解析。
- public Student() {
- super();
- }
- }
注意: spa
一、須要轉換的model對象必定要添加@XmlRootElement註解,其裏面的其餘對象則不須要 .net
二、須要轉換的model對象必定要有不帶參數的構造方法,包括該對象裏面引用的對象。 ssr
Java代碼
- package hb.jaxb;
-
- 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 org.junit.Test;
-
- public class TestJaxb {
-
- @Test
- public void beanToXML() {
- Classroom classroom = new Classroom(1, "軟件工程", 4);
- Student student = new Student(101, "張三", 22, classroom);
-
- try {
- JAXBContext context = JAXBContext.newInstance(Student.class);
- Marshaller marshaller = context.createMarshaller();
- marshaller.marshal(student, System.out);
- } catch (JAXBException e) {
- e.printStackTrace();
- }
-
- }
-
- @Test
- public void XMLStringToBean(){
- String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><student><age>22</age><classroom><grade>4</grade><id>1</id><name>軟件工程</name></classroom><id>101</id><name>張三</name></student>";
- try {
- JAXBContext context = JAXBContext.newInstance(Student.class);
- Unmarshaller unmarshaller = context.createUnmarshaller();
- Student student = (Student)unmarshaller.unmarshal(new StringReader(xmlStr));
- System.out.println(student.getAge());
- System.out.println(student.getClassroom().getName());
- } catch (JAXBException e) {
- e.printStackTrace();
- }
-
- }
- }
JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項能夠根據XML Schema產生Java類的技術。該過程當中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,並能將Java對象樹的內容從新寫到XML實例文檔。從另外一方面來說,JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java開發者在Java應用程序中能方便地結合XML數據和處理函數。 xml
JAXBContext 類提供到 JAXB API 的客戶端入口點。它提供了管理實現 JAXB 綁定框架操做所需的 XML/Java 綁定信息的抽象,這些操做包括:解組、編組和驗證。 對象