使用JAXB解析xml文件(一)


 

 

1.java中解析xml的幾種方式

1.1 JDK原生dom形式 原理:一次性把xml讀入內存,在內存中構建成樹形結構。優點:對節點操作方便,缺點:需要大量的內存空間,浪費資源

1.2 SAX形式 原理:基於事件形式,當解析器發現元素開始、元素結束、文本、文檔的開始或結束等時,發送事件,程序員編寫響應這些事件的代碼,保存數據。優點:相對於dom形式更快捷,占用資源少。缺點:沒有持久話。事件過后,若沒保存數據,那么數據就丟了。

1.3 DOM4J 它是一個開源的框架,具有性能優異、功能強大和極端易用使用的特點。

1.4 JAXB(Java Architecture for XML Binding) 是一個業界的標准,是一項可以根據XML Schema產生Java類的技術。

 

2.JAXB的幾個核心對象

2.1 JAXBContext Jaxb的上下文,通過這個對象我們能拿到另外兩個核心對象Unmarshaller(用於解析xml)和Marshaller(生成xml)

2.2 JAXBContext通常使用它的靜態方法newInstance(Class className)來獲得對象

2.3 Unmarshaller用於解析xml 通過JAXBContext的createUnmarshaller方法獲得到

2.4 Marshaller用於生成xml 通過JAXBContext的createMarshaller方法獲得到

 

3.示例代碼

3.1 實體類Bean與Property 

 1 package org.lyrk.accp8.s2.chapter.xml;
 2 
 3 import javax.xml.bind.annotation.*;
 4 
 5 /**
 6  * Created by niechen on 17/5/9.
 7  */
 8 @XmlRootElement
 9 @XmlAccessorType(XmlAccessType.FIELD)
10 public class Bean {
11 
12     @XmlElement
13     private Property property;
14 
15     public Property getProperty() {
16         return property;
17     }
18 
19     public void setProperty(Property property) {
20         this.property = property;
21     }
22 }
23 
24 @XmlAccessorType(value = XmlAccessType.FIELD)
25 class Property {
26     @XmlAttribute(name = "id")
27     private String id;
28 
29     @XmlAttribute(name = "value")
30     private String value;
31 
32     public String getId() {
33         return id;
34     }
35 
36     public void setId(String id) {
37         this.id = id;
38     }
39 
40     public String getValue() {
41         return value;
42     }
43 
44     public void setValue(String value) {
45         this.value = value;
46     }
47 }

3.2 主函數類

 1 package org.lyrk.accp8.s2.chapter.xml;
 2 
 3 import javax.xml.bind.JAXBContext;
 4 import javax.xml.bind.JAXBException;
 5 import javax.xml.bind.Unmarshaller;
 6 import java.io.InputStream;
 7 
 8 /**
 9  * Created by niechen on 17/5/9.
10  */
11 public class Test {
12 
13     public static void main(String[] args) {
14         try {
15             JAXBContext jaxbContext = JAXBContext.newInstance(Bean.class);//創建JAXBContext對象,注意一定要傳@XmlRootElement的所標記的類的類型
16             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();//拿到xml解析對象
17             InputStream inputStream = Bean.class.getClassLoader().getResourceAsStream("bean.xml");//在classpath下讀取xml的文件流
18             Bean bean = (Bean) unmarshaller.unmarshal(inputStream);//將xml轉換成實體對象
19             System.out.println(bean.getProperty().getId());//輸出ID屬性
20             System.out.println(bean.getProperty().getValue());//輸出value屬性
21         } catch (JAXBException e) {
22             e.printStackTrace();
23         }
24     }
25 }

3.3 xml文件內容

1 <?xml version="1.0" encoding="UTF-8"?>
2 <bean>
3     <property id="name" value="10" />
4 </bean>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM