關於JAXP, JAXB, SAX, StAX, DOM等名詞解釋
關於JAXP, JAXB, SAX, StAX, DOM等名詞解釋
DOM(Document Object Model):SAX和DOM最先出來的兩種解析器。是一種tree-based API。DOM的特點是,把整個XML內容讀取記憶體中進行處理。
優點:可以隨機進行對某個節點內容進行讀取和寫入。缺點:耗費記憶體,效能差。
如果要對XML內容進行很多隨機的讀取其中的內容,或進行更改,還是建議使用DOM解析器。
SAX(Simple API for XML):和DOM不同,SAX不是一次把所有XML內容讀取進來,而是進行一行一行的讀取。每讀取一行,就處發事件,處理這行的內容。
優點:處理速度快,節省記憶體。缺點:不能再次讀取已經讀過的內容,而且只能進行讀,不能進行寫。
適用於只掃描一次XML內容,就能提取想要的資料的場合。
StAX(Streaming API for XML):StAX解析器是最後出來的解析器,被認為比前兩種都好。
它和SAX非常像,也是event-based API,不同的一點是:
StAX是Pull型別,而SAX是Push型別,這兩種型別有什麼不同,稍後的文章介紹。
(StAX有兩種API,一種是cursor-based,一種是iterator-based)
StAX相對SAX來說,更易於使用,程式設計上更方便一點。
SAX只能對XML內容進行讀,不能寫;而StAX既可進行讀,也可以進行寫。
優點:處理速度快,節省記憶體,可進行讀寫。缺點:不能再次讀取已經讀過的內容。
適用於只掃描一次XML內容,就能提取想要的資料的場合。
JAXB: JAXB是Java Architecture for XML Binding的縮寫。可以將一個Java物件轉變成為XML格式,反之亦然。
我們把物件與關係資料庫之間的對映稱為ORM,其實也可以把物件與XML之間的對映稱為OXM(Object XML Mapping)。
原來JAXB是Java EE的一部分,在JDK1.6中,SUN將其放到了Java SE中,這也是SUN的一貫做法。
JDK1.6中自帶的這個JAXB版本是2.0,比起1.0(JSR 31)來,JAXB2(JSR 222)用JDK5的新特性Annotation來標識要作繫結的類和屬性等,
這就極大簡化了開發的工作量。
JAXP和JAXB的:
1,JAXP只能把物件資料和其它資料從XML檔案中解析出來,如果要把解析出來的資料組裝成Java物件的話,需要手動組裝。
JAXB可以直接把XML內容轉換成Java物件。
用JAXB自動組裝和StAX手動組裝的例子:http://www.cnblogs.com/qiyebao/p/4573071.html
用JAXB和StAX聯合組裝例子和一些測試的結果,非常好:https://dzone.com/articles/xml-unmarshalling-benchmark
http://stackoverflow.com/questions/25643097/can-a-part-of-xml-be-marshalled-using-jaxb-or-jaxb-stax
2,JAXP是JAXB讀取過程中的一部分,JAXB預設的XML解析器就是StAX。
參考:
http://m.blog.csdn.net/article/details?id=3972043
http://m.blog.csdn.net/article/details?id=17293591
http://www.cnblogs.com/f1194361820/p/4467935.html
JAXB:
http://blog.bdoughan.com/2012/08/removing-jaxbelement-from-your-domain.html?m=1
http://www.ibm.com/developerworks/cn/webservices/1003_sunzg_jaxb/index.html
http://www.oschina.net/question/12_25295?fromerr=NeKC6Bry
https://docs.oracle.com/javase/tutorial/jaxb/intro/
http://www.oracle.com/technetwork/articles/javase/index-140168.html
http://www.vogella.com/tutorials/JAXB/article.html
http://m.blog.chinaunix.net/uid-20749563-id-718396.html
JAXP:
http://docs.oracle.com/javase/tutorial/jaxp/
http://www.ibm.com/developerworks/cn/xml/x-jaxp/index.html
StAX:
http://zangweiren.iteye.com/blog/647334
http://www.saxproject.org/event.html
http://www.xml.com/pub/a/2003/09/17/stax.html?page=1
http://www.vogella.com/tutorials/JavaXML/article.html#javaxml
StAX and SAX and DOM:(good)
http://dublintech.blogspot.jp/2011/12/jaxb-sax-dom-performance.html?m=1(需要用代理開啟,3種解析器的效能測試)
http://tutorials.jenkov.com/java-xml/sax-vs-stax.html(從XML到StAX到DOM說明)
http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html
http://m.blog.csdn.net/article/details?id=17293591
http://m.blog.csdn.net/article/details?id=3972043
http://www.cnblogs.com/f1194361820/p/4467935.html