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

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

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

    白玉成的專欄

    Eclipse,讓我歡喜讓我憂!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      17 隨筆 :: 0 文章 :: 6 評論 :: 0 Trackbacks

    第一:首先介紹一下SAX,DOM,JAXP,JDOM,DOM4J的基本知識:
    (注意:至于 JAXP  |   JAXB  |   JAXM  |   JAXR  |   JAX-RPC 分別指什么,查看http://gceclub.sun.com.cn/staticcontent/html/xml/faq/#jaxr_)

    1、sax、dom是兩種對xml文檔進(jìn)行分析的方法(沒有具體的實現(xiàn),只有接口)
    所以不是解釋器,如果光有他們,你是完成不了對xml文檔的處理的。
    sax的包是org.xml.sax
    dom的包是org.w3c.dom
    包的名稱很重要,它有助于你理解他們之間的關(guān)系。

    2、jaxp是api,他封裝了sax\dom兩種接口。并在sax\dom的基礎(chǔ)之上,作了一套比較簡單的api以供開發(fā)人員使用。
    jaxp的包是javax.xml.parsers
    可以看看jaxp的源文件,它的文件中包含了對sax或者dom的引用(import)
    jaxp也不是具體的實現(xiàn),他只是一套api。如果你僅僅有jaxp那是無法工作的
    (其實jaxp只是完成對sax、dom的包裝,生成了DocumentBuilderFactory\DocumentBuilder
    和SAXParserFactory SAXParser。也就是設(shè)計模式中的工廠模式,他的好處就是具體的對象( 解釋器)建立由子類完成)

    3、xerces解釋器(號稱地球上最快的xml解釋器)
    在xerces中對jaxp中定義的SAXParser SAXParserFactory DocumentBuilder DocumentBuilderFactory進(jìn)行了繼承(extends)對應(yīng)SAXParserImpl SAXParserFactoryImpl DocumentBuilderImpl DocumentBuilderFactoryImpl
    這就是為什么你的classpath中只要有xerces.jar(其中包含了sax dom jaxp )和 xercesImpl.jar就可以的原因了.

    4、什么時候可以用別的解釋器 比如crimson呢
    他也是和xerces一樣 是解釋器,很簡單,用crimson.jar 替代xercesImpl.jar

    5、jdom和dom4j
     
    W3C的DOM標(biāo)準(zhǔn)API難用的讓人想撞墻,于是有一幫人開發(fā)Java專用的XML API目的是為了便于使用,這就是jdom的由來,開發(fā)到一半的時候,另一部分人又分了出來,他們有自己的想法,于是他們就去開發(fā)dom4j,形成了今天這樣兩個API,至于他們之間的性能,jdom全面慘敗,dom4j大獲全勝。我覺得jdom和dom4j就相當(dāng)于sax/dom+jaxp,具體的解釋器可以選擇。

    第二:再介紹一下,dom,sax,jdom,dom4j的技術(shù)特點(diǎn):

    1: DOM
    DOM 是用與平臺和語言無關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn)。DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而 DOM 被認(rèn)為是基于樹或基于對象的。DOM 以及廣義的基于樹的處理具有幾個優(yōu)點(diǎn)。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時候在樹中上下導(dǎo)航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。
      另一方面,對于特別大的文檔,解析和加載整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的數(shù)據(jù)會更好。這些基于事件的模型,比如 SAX。

    2:SAX
      這種處理的優(yōu)點(diǎn)非常類似于流媒體的優(yōu)點(diǎn)。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲在內(nèi)存中。這對于大型文檔來說是個巨大的優(yōu)點(diǎn)。事實上,應(yīng)用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。

    3: 選擇 DOM 還是選擇 SAX ?
      對于需要自己編寫代碼來處理 XML 文檔的開發(fā)人員來說,選擇 DOM 還是 SAX 解析模型是一個非常重要的設(shè)計決策。
      DOM 采用建立樹形結(jié)構(gòu)的方式訪問 XML 文檔,而 SAX 采用的事件模型。
      DOM 解析器把 XML 文檔轉(zhuǎn)化為一個包含其內(nèi)容的樹,并可以對樹進(jìn)行遍歷。用 DOM 解析模型的優(yōu)點(diǎn)是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點(diǎn)來完成任務(wù)??梢院苋菀椎奶砑雍托薷臉渲械脑亍H欢捎谑褂?DOM 解析器的時候需要處理整個 XML 文檔,所以對性能和內(nèi)存的要求比較高,尤其是遇到很大的 XML 文件的時候。由于它的遍歷能力,DOM 解析器常用于 XML 文檔需要頻繁的改變的服務(wù)中。
      SAX 解析器采用了基于事件的模型,它在解析 XML 文檔的時候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時候,它可以激活一個回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。SAX 對內(nèi)存的要求通常會比較低,因為它讓開發(fā)人員自己來決定所要處理的tag。特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時,SAX 這種擴(kuò)展能力得到了更好的體現(xiàn)。但用 SAX 解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數(shù)據(jù)。

    4:jdom http://www.jdom.org
    JDOM 的目的是成為 Java 特定文檔模型,它簡化與 XML 的交互并且比使用 DOM 實現(xiàn)更快。由于是第一個 Java 特定模型,JDOM 一直得到大力推廣和促進(jìn)。正在考慮通過“Java 規(guī)范請求 JSR-102”將它最終用作“Java 標(biāo)準(zhǔn)擴(kuò)展”。從 2000 年初就已經(jīng)開始了 JDOM 開發(fā)。
      JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用具體類而不使用接口。這在某些方面簡化了 API,但是也限制了靈活性。第二,API 大量使用了 Collections 類,簡化了那些已經(jīng)熟悉這些類的 Java 開發(fā)者的使用。
      JDOM 文檔聲明其目的是“使用 20%(或更少)的精力解決 80%(或更多)Java/XML 問題”(根據(jù)學(xué)習(xí)曲線假定為 20%)。JDOM 對于大多數(shù) Java/XML 應(yīng)用程序來說當(dāng)然是有用的,并且大多數(shù)開發(fā)者發(fā)現(xiàn) API 比 DOM 容易理解得多。JDOM 還包括對程序行為的相當(dāng)廣泛檢查以防止用戶做任何在 XML 中無意義的事。然而,它仍需要您充分理解 XML 以便做一些超出基本的工作(或者甚至理解某些情況下的錯誤)。這也許是比學(xué)習(xí) DOM 或 JDOM 接口都更有意義的工作。
      JDOM 自身不包含解析器。它通常使用 SAX2 解析器來解析和驗證輸入 XML 文檔(盡管它還可以將以前構(gòu)造的 DOM 表示作為輸入)。它包含一些轉(zhuǎn)換器以將 JDOM 表示輸出成 SAX2 事件流、DOM 模型或 XML 文本文檔。JDOM 是在 Apache 許可證變體下發(fā)布的開放源碼。

    5: DOM4J   http://dom4j.sourceforge.net/
     雖然 DOM4J 代表了完全獨(dú)立的開發(fā)結(jié)果,但最初,它是 JDOM 的一種智能分支。它合并了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項,它通過 DOM4J API 和標(biāo)準(zhǔn) DOM 接口具有并行訪問功能。從 2000 下半年開始,它就一直處于開發(fā)之中。
      為支持所有這些功能,DOM4J 使用接口和抽象基本類方法。DOM4J 大量使用了 API 中的 Collections 類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然 DOM4J 付出了更復(fù)雜的 API 的代價,但是它提供了比 JDOM 大得多的靈活性。
      在添加靈活性、XPath 集成和對大文檔處理的目標(biāo)時,DOM4J 的目標(biāo)與 JDOM 是一樣的:針對 Java 開發(fā)者的易用性和直觀操作。它還致力于成為比 JDOM 更完整的解決方案,實現(xiàn)在本質(zhì)上處理所有 Java/XML 問題的目標(biāo)。在完成該目標(biāo)時,它比 JDOM 更少強(qiáng)調(diào)防止不正確的應(yīng)用程序行為。
      DOM4J 是一個非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。

    最后:我建議用dom4j

     JDOM 和 DOM 在性能測試時表現(xiàn)不佳,在測試 10M 文檔時內(nèi)存溢出。在小文檔情況下還值得考慮使用 DOM 和 JDOM。雖然 JDOM 的開發(fā)者已經(jīng)說明他們期望在正式發(fā)行版前專注性能問題,但是從性能觀點(diǎn)來看,它確實沒有值得推薦之處。另外,DOM 仍是一個非常好的選擇。DOM 實現(xiàn)廣泛應(yīng)用于多種編程語言。它還是許多其它與 XML 相關(guān)的標(biāo)準(zhǔn)的基礎(chǔ),因為它正式獲得 W3C 推薦(與基于非標(biāo)準(zhǔn)的 Java 模型相對),所以在某些類型的項目中可能也需要它(如在 javascript 中使用 DOM)。
      SAX表現(xiàn)較好,這要依賴于它特定的解析方式。一個 SAX 檢測即將到來的XML流,但并沒有載入到內(nèi)存(當(dāng)然當(dāng)XML流被讀入時,會有部分文檔暫時隱藏在內(nèi)存中)。
      無疑,DOM4J是最好的,目前許多開源項目中大量采用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 來讀取 XML 配置文件。如果不考慮可移植性,那就采用DOM4J吧!

    posted on 2008-11-21 21:09 白玉成 閱讀(729) 評論(0)  編輯  收藏 所屬分類: XML

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成人最新午夜免费视频| 久久久久国色av免费看| 成人男女网18免费视频| 亚洲免费闲人蜜桃| 亚洲精品在线免费观看| 亚洲精品视频在线播放| 麻豆最新国产剧情AV原创免费| 亚洲一区中文字幕久久| 51在线视频免费观看视频| 亚洲毛片无码专区亚洲乱| 97在线观看永久免费视频| 亚洲人成免费电影| 成年男女男精品免费视频网站| 一本天堂ⅴ无码亚洲道久久| 岛国大片免费在线观看| 国产精品亚洲综合一区在线观看| 国产在线播放免费| 久久国产美女免费观看精品| 国产亚洲av片在线观看16女人| 日本免费中文字幕| 亚洲天堂电影在线观看| 岛国片在线免费观看| 一级毛片免费视频网站| 亚洲AV日韩AV永久无码绿巨人 | 青娱乐在线视频免费观看| 亚洲精品黄色视频在线观看免费资源| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲最大中文字幕无码网站 | 亚洲heyzo专区无码综合| 又粗又硬又大又爽免费视频播放| 一区二区三区免费看| 亚洲无删减国产精品一区| 国产精品久久久久免费a∨| 免费亚洲视频在线观看| 久久精品国产亚洲AV麻豆不卡 | 中文字幕在线日亚洲9| 亚洲国产高清精品线久久| 国产成人久久AV免费| 亚洲av色香蕉一区二区三区 | 免费人成视频在线观看网站| 亚洲一卡2卡3卡4卡乱码 在线|