1. 程式人生 > >關於JAXP, JAXB, SAX, StAX, DOM等名詞解釋

關於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