天天看點

Java與XML的故事序:Jaxb和Jaxp

當年我剛開始使用Java的時候,有時候會考慮使用xml來存儲資料,那個時候一般使用JAXP中的DOM或者SAX parser 包來CRUD xml檔案。後來Web Service大行其道,WSDL, XSD這種很好格式化的文檔,非常适合可以自動生成代碼,于是出現了JAXB,通過annotation友善實作xml和Java class之間的轉換。

JAXP (Java API for XML Processing) 中DOM( Document Object Model)把整個xml當成對象處理,非常友善随機讀寫,不過如果xml檔案很大的話那就可能記憶體占用成問題,SAX(Simple API for XML)把xml中所有的節點當成事件處理(org.xml.sax.helpers.DefaultHandler),那麼順序讀取xml檔案的時候比DOM就好很多,更快占用記憶體少。

JAXP中還有非常有用的2個成員,XSTL(Extensible Stylesheet Language Transformations)在Java中實作XML與其他格式的轉換和Stax(Streaming API for XML)類似SAX,不同是按流方式處理XML檔案,同時主動拉取資料而不是被動等待event到來。

JAXP的API可以說是對XML的直接處理低層次API,對于WebService以及ORM服務來說,直接使用還是太過複雜,為了進一步的簡化程式員的工作,JAXB (Java Architecture for XML Binding) 出現了,作為特殊的API (屬于 

javax.xml.bind的一部分

) ,利用XML文檔的XML Schema Definition(XSD),在Java中使用 annotations實作XML 文檔和 java 對象模型轉映射。

接下來的系列中,主要是寫寫自己如何通過JAXB實作XML與Java對象的轉換。