<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
    作者:robbin
    網(wǎng)址:http://www.fankai.com/

    在IBM的developerWorks上有幾篇非常優(yōu)秀的關(guān)于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項目,結(jié)果Xerces勝出,成了Apache XML小組全力開發(fā)的XML API,而Crimon已經(jīng)早就不做了,如今Xerces名滿天下,到處都是在用Xerces DOM和SAX解析器,只有Sun不服氣,非要在JDK1.4里面使用過時的Crimson,讓人感覺像是在賭氣一樣,真是讓人可憐又可氣!不過IBM發(fā)行JDK用的XML 解析器自然是Xerces

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

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

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

    二、JAXP的姍姍來遲

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

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

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

    三、 DOM解析器和DOM API

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

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

    JAXP應(yīng)用程序 -> JAXP接口 -> Xerces DOM實現(xiàn) -> Xerces DOM/SAX 解析器


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

    JAXP應(yīng)用程序 -> JAXP接口 -> Crimson DOM實現(xiàn) -> Crimson DOM/SAX 解析器


    另外你也可以這樣來做:

    JAXP應(yīng)用程序 -> JAXP接口 -> Crimson DOM實現(xiàn) -> Xerces DOM/SAX 解析器


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

    四、不是標(biāo)準(zhǔn)的dom4j和jdom

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

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

    jdom應(yīng)用程序 -> jdom API -> Xerces/Crimson解析器


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

    dom4j應(yīng)用程序 -> dom4j API -> Xerces/Crimson解析器


    或者

    dom4j應(yīng)用程序 -> dom4j API -> Alfred2解析器


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

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

    五、小插曲

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

    BTW: Hibernate也用的是dom4j來讀取XML配置文件,如今已經(jīng)越來越多的程序紛紛采用dom4j,如果你不是那么在乎可移植性,我強烈建議你采用dom4j。
    posted on 2005-08-05 12:12 ivaneeo 閱讀(344) 評論(0)  編輯  收藏 所屬分類: java魔力
    主站蜘蛛池模板: 亚洲中文字幕人成乱码 | 亚洲国产精品lv| 亚洲国产精品无码中文字| 亚洲成a人片77777老司机| 亚洲欧洲专线一区| 一级特黄录像视频免费| 久久精品成人免费网站| 青青青免费国产在线视频小草| 女人18毛片特级一级免费视频| 亚洲 综合 国产 欧洲 丝袜| 国产精品亚洲一区二区三区在线| 亚洲无吗在线视频| 成人免费区一区二区三区| 在线观看成人免费视频| 亚洲依依成人亚洲社区| 香港a毛片免费观看| 国产无遮挡吃胸膜奶免费看视频| 亚洲AV无码精品色午夜果冻不卡 | 女人18毛片水最多免费观看| 亚洲av永久无码| 久久青草免费91线频观看站街| 国产精品国产免费无码专区不卡 | 一级毛片a免费播放王色| 国产亚洲精午夜久久久久久| 亚洲无吗在线视频| 国产jizzjizz免费看jizz| 亚洲天堂一区在线| 嫩草影院在线播放www免费观看| 亚洲AV日韩AV天堂一区二区三区| 1000部拍拍拍18勿入免费视频下载 | 免费精品国自产拍在线播放 | 久久永久免费人妻精品下载| 亚洲国产精品狼友中文久久久| 亚洲精品中文字幕| 精品亚洲视频在线观看| 一区二区三区四区免费视频 | 老汉精品免费AV在线播放| 亚洲人片在线观看天堂无码| 亚洲欧洲一区二区三区| 日韩成人精品日本亚洲| 日本免费人成视频播放|