亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java XML API 漫談

系統 1750 0

【轉】 http://www.iteye.com/topic/75

在IBM的developerWorks上有幾篇非常優秀的關于Java XML API的評測文章,它們是: ?

http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml ?

http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml ?

http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part2/index.shtml ?

http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part1/index.shtml ?

對這幾篇文章我想說的就是 “吐血推薦” ?

Java的XML API這幾篇文章該講的都講到了,我只想補充幾點: ?

一、Crimson和Xerces恩仇錄 ?

Crimson來自于Sun捐贈給Apache的ProjectX項目,Xerces來自IBM捐贈給Apache的XML4J項目,結果Xerces勝出,成了Apache XML小組全力開發的XML API,而Crimon已經早就不做了,如今Xerces名滿天下,到處都是在用Xerces DOM和SAX解析器,只有Sun不服氣,非要在JDK1.4里面使用過時的Crimson,讓人感覺像是在賭氣一樣,真是讓人可憐又可氣!不過IBM發行JDK用的XML 解析器自然是Xerces。 ?

由于JDK的Class Loader的優先級關系,當你采用JAXP編寫XML程序的時候,即使把Xerces包引入CLASSPATH,JDK還是會頑固的使用Crimson,這一點通過打開JVM的verbose參數可以觀察到。不過JDK也允許你采用其它的解析器,因此我們可以通過在JRE\lib\目錄下建一個jaxp.properties的文件,來替換解析器,jaxp.properties內容如下: ?

引用
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl ?
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl


這樣就可以使用Xerces,當然你必須還是要把Xerces包放到CLASSPATH下。 ?

二、JAXP的姍姍來遲 ?

Sun在XML領域總是后知后覺,等到Sun重視XML的時候,XML的API早就滿天 飛了,尤其是IBM具有非常大的領先優勢。不過Sun是規范的制訂者,于是參考W3C的標準制訂了JAXP規范。JAXP不像Xerces和Crimon那樣,它只是一個spec,本身是不做任何事情的,它的作用就是提出一個統一的接口,讓其它的XML API都來遵循JAXP編程,那么用JAXP寫出來的程序,底層的API可以任意切換。 ?

具體來說JAXP包括了幾個工廠類,這就是JDK1.4里面的javax.xml.parsers 包,用來尋找符合DOM標準的XML API實現類的位置;此外JAXP還包括一整套interface,這就是JDK1.4里面的org.w3c.dom那幾個包。工廠類負責加載DOM的實現類。那么加載的規則是什么呢? ?

我是通過閱讀JAXP的源代碼知道的,工廠類首先會根據java命令行傳入的參數進行尋找,然后在根據JRE\lib\jaxp.properties中定義的實現類尋找,最后什么都找不到的話,就用Crimson。注意Crimons是由Bootstrap Class Loader來load的,如果你不通過上面兩個方法來改變工廠的尋找順序,那么鐵定用Crimson了 ?

三、 DOM解析器和DOM API ?

當你嚴格采用JAXP編程的時候,是遵循W3C的DOm標準的,那么在JAXP底層你實際上可以任意切換不同的DOM實現,例如Xerces,或者Crimon,再或者其它,切換方法就是配置jaxp.properties。因此JAXP就是一些標準接口而已。 ?

而Xerces和Crimon也不單單是一個DOM實現那么簡單,他們本身實際上也包含SAX解析器和DOM解析器。所以一個JAXP程序下面有如下層次: ?

引用
JAXP應用程序 -> JAXP接口 -> Xerces DOM實現 -> Xerces DOM/SAX 解析器



只要你用JAXP編程,那么你就可以切換到Crimson上來 ?

引用
JAXP應用程序 -> JAXP接口 -> Crimson DOM實現 -> Crimson DOM/SAX 解析器



另外你也可以這樣來做: ?

引用
JAXP應用程序 -> JAXP接口 -> Crimson DOM實現 -> Xerces DOM/SAX 解析器



不過如果你的程序不安裝JAXP來寫,那么就沒有辦法切換不同的DOM實現了。 ?

四、不是標準的dom4j和jdom ?

W3C的DOM標準API難用的讓人想撞墻,于是有一幫人開發Java專用的XML API目的是為了便于使用,這就是jdom的由來,開發到一半的時候,另一部分人又分了出來,他們有自己的想法,于是他們就去開發dom4j,形成了今天這樣兩個API,至于他們之間的性能,功能之比較看看上面我推薦的文章就知道了,jdom全面慘敗。 ?

jdom 相當于上面的? JAXP接口 + Xerces DOM實現部分,它本身沒有解析器,它可以使用Xerces或者Crimson的解析器,就是這樣: ?

引用
jdom應用程序 -> jdom API -> Xerces/Crimson解析器



dom4j 和jdom類似,不過他自己綁定了一個叫做Alfred2的解析器,功能不是很全,但是速度很快,當沒有其它的解析器的時候,dom4j將使用Alfred2解析器,如下: ?

引用
dom4j應用程序 -> dom4j API ->? Xerces/Crimson解析器



或者 ?

引用
dom4j應用程序 -> dom4j API ->? Alfred2解析器



你在SF上下載的dom4j.jar是不含 Alfred2解析器的,而dom4j-full.jar包含了 Alfred2解析器,在這種情況下,實際上你什么也不需要,光是一個dom4j-full.jar就全部都包括了。 ?

因此可以看出采用dom4j/jdom編寫的應用程序,已經不具備可移植性了。 ?

五、小插曲 ?

Sun是JAXP標準的制訂者,甚至很執著的在JDK1.4里面綁定Crimson DOM實現和解析器,然后可笑的是,Sun自己的JAXM RI竟然不是用JAXP寫出來的,而是dom4j,制訂標準讓大家遵守,自己卻監守自盜,這未免太說不過去了吧! ?

BTW: Hibernate也用的是dom4j來讀取XML配置文件,如今已經越來越多的程序紛紛采用dom4j,如果你不是那么在乎可移植性,我強烈建議你采用dom4j。

Java XML API 漫談


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩一二三区 | 亚洲欧美精品中文字幕 | 男女污污在线观看 | 狠狠亚洲婷婷综合色香五 | 国产精品福利在线观看 | 四虎影视国产884a精品亚洲 | 深夜影院在线观看 | 国产乳摇福利视频在线观看 | 日韩一区二区视频在线观看 | 一级特黄aa毛片免费观看 | 国产色产综合色产在线观看视频 | 日韩一区二区三区不卡 | 久久久国产精品网站 | 快播第四色 | 春色www在线视频观看 | 亚洲 国产 图片 | 第四色激情网 | 国产日韩欧美中文 | 天天色天天射天天干 | 欧美激情区 | 国产成人青青热久免费精品 | 日韩中文字幕视频在线观看 | 国产日本久久久久久久久婷婷 | 久久www香蕉免费人成 | 日本我不卡 | a级精品九九九大片免费看 a级毛片高清免费视频 | 天天干天天干天天 | 国产精品久久天天影视 | 成人亚洲在线 | 亚洲伊人久久大香线蕉结合 | 亚洲精品一二三四 | 国产欧美日韩亚洲 | 毛片免费全部免费观看 | 日本一本二本免费播放视频 | xx毛片| 久久久久久久综合色一本 | 久久伊人在 | 男人草女人的视频 | 成人看片黄a免费看视频 | 亚色91| 成人免费牛牛在线视频 |