Xml和Bean互轉 jaxb
阿新 • • 發佈:2019-01-07
JAXB:Java Architecture for XML Binding
是一個業界的標準,是一項可以根據XML Schema產生java類的技術.該過程中jaxb也提供了講xml例項文件反向生成java物件方法,並能講java物件書的內容重新寫到xml例項文件中. 從另一方面來講,jaxb提供了快速而簡單的方法將xml模式繫結到java表示,使得java開發者在java應用程式中能方便的結合xml資料和處理函式
@XmlRootElement public class Student { private Integer id; private String name; public Student() { super(); } public Student(Integer id, String name) { super(); this.id = id; this.name = name; } public Integer getId() { return id; } @XmlElement public void setId(Integer id) { this.id = id; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
jdk1.7之前bean和xml轉換的方式(解組和編組),手動得到各種物件,設定各種引數
public class JAXBTest { public static void main(String[] args) { generateXml(); generateBean(); } // bean轉為xml;編組方法 public static void generateXml() { Student stu = new Student(10, "小明"); File f = new File("D:/cheng/zz.xml"); JAXBContext jc; try { // 根據Student生成上下文物件 jc = JAXBContext.newInstance(stu.getClass()); // 從上下文中獲取Marshller物件;作用講bean編組(轉換)xml Marshaller ma = jc.createMarshaller(); // 生成xml做的一些配置 // 格式輸出,按照標籤自動換行,否則一行輸出 ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 設定編碼,預設為utf-8 ma.setProperty(Marshaller.JAXB_ENCODING, "utf-8"); // 是否省略頭資訊,預設是不省略(預設false) ma.setProperty(Marshaller.JAXB_FRAGMENT, false); // 轉換,講p轉換為檔案file ma.marshal(stu, f); System.out.println(f); } catch (JAXBException e) { e.printStackTrace(); } } // xml轉了bean;解組方法 public static void generateBean() { File f = new File("D:/cheng/zz.xml"); JAXBContext jc; try { jc = JAXBContext.newInstance(Student.class);// 根據要生成的java類,得到上下文 Unmarshaller uma = jc.createUnmarshaller();// 根據上下文得到操作物件 Student stu = (Student) uma.unmarshal(f);//解組; 將xml檔案轉為java物件 System.out.println(stu); } catch (JAXBException e) { e.printStackTrace(); } } }
jdk1.7開始,對解組和編組進行更簡單的封裝;直接通過JAXB靜態呼叫相應的根據方法就行了;如果實際專案中要進行個性化設定,才需要自己建立JAXBContext例項
//jdk1.7開始,編組方法;bean轉為xml public static void generateXml1() { Student stu = new Student(20, "小剛"); File f=new File("D:/cheng/zz.xml"); JAXB.marshal(stu, f); System.out.println(f.toString()); } //jdk1.7開始,解組組方法;xml轉為bean public static void generateBean1() { File f=new File("D:/cheng/zz.xml"); Student stu=JAXB.unmarshal(f, Student.class); System.out.println(stu); }