• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java解析XML的方法比較研究

      2009-08-19 09:01:44陳小毛湯文兵
      中國新技術(shù)新產(chǎn)品 2009年15期

      陳小毛 湯文兵

      摘要:XML應(yīng)用日益廣泛,正確高效地解析XML文件的數(shù)據(jù)信息日顯重要。Java解析XML的方法有多種,主流方法有DOM、SAX、JDOM、DOM4J。本文分析了這些方法的優(yōu)劣,給出了最基本的解析XML的示例Java程序。在實際應(yīng)用中,可以根據(jù)各種解析方法的特點選擇。

      關(guān)鍵詞:JAVA;XML;DOM;SAX;JDOM;DOM4J

      1 引言

      隨著Web的廣泛應(yīng)用,XML已成為互聯(lián)網(wǎng)上主要數(shù)據(jù)交換標(biāo)準(zhǔn)之一,正確高效地解析XML文件的數(shù)據(jù)信息日顯重要。在Java中主要有四種解析XML的方法:DOM、SAX、JDOM和DOM4J,它們各有特點。通過比較,可以在應(yīng)用中更加合理地選擇它們。

      2 DOM解析XML文檔

      DOM(文檔對象模型)是W3C制定的一套標(biāo)準(zhǔn)接口,獨立于語言平臺的,提供了構(gòu)成DOM的不同對象的定義,卻沒有提供特定的實現(xiàn)[1]。實際上,任何編程語言都能夠?qū)崿F(xiàn),而不僅限于Java。DOM是以層次結(jié)構(gòu)組織的節(jié)點或信息片斷的集合。這個層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而DOM被認(rèn)為是基于樹或基于對象的。DOM以及廣義的基于樹的處理具有幾個優(yōu)點。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對數(shù)據(jù)和結(jié)構(gòu)作出更改。其次,它還可以在任何時候在樹中上下導(dǎo)航,而不是像SAX那樣是一次性的處理。

      2.1 DOM 設(shè)計的局限性

      語言獨立。DOM 并不是用人們心目中的 Java 語言設(shè)計的。雖然這種方法保留了在不同語言中非常相似的API,它也使那些習(xí)慣 Java 語言的程序員感到更麻煩。例如:Java 語言內(nèi)建了一種 String 類,而 DOM 則規(guī)范定義了自己的 Text 類。

      嚴(yán)格的層次結(jié)構(gòu)。DOM API 直接沿襲了 XML 規(guī)范。在 XML 中,每件東西都是一個結(jié)點,因此能在 DOM 中找到一個幾乎每件東西都可以擴(kuò)展的基于 Node 的接口和返回 Node 的一系列方法。就多態(tài)性的觀點來講,它是優(yōu)秀的,但鑒于如上解釋,它在 Java 語言中的應(yīng)用是困難而且不便的,其中從 Node 向葉類型作顯式下拉會導(dǎo)致代碼的冗長和難以理解。

      接口驅(qū)動。公共 DOM API 僅由接口組成(Exception 類是個例外)。W3C對提供實現(xiàn)并不感興趣,它只對定義接口感興趣。但它也意味著作為 Java 程序員使用 API 在創(chuàng)建 XML 對象時增加了分散程度,因為W3C標(biāo)準(zhǔn)大量使用工廠化的類和類似的靈活的但不直接的模式。在某些應(yīng)用中,XML文檔是僅由語法分析器建立的,而從不會由應(yīng)用程序級代碼建立,這是不相關(guān)的。但隨著 XML 更廣泛的使用,并不是所有問題都繼續(xù)需要由語法分析器來驅(qū)動。應(yīng)用程序的開發(fā)人員需要一個更方便的方法有計劃地構(gòu)造 XML 對象。

      2.2 DOM解析XML示例

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

      DocumentBuilder builder = factory.newDocumentBuilder();

      Document doc = builder.parse(new File("sample.xml"));

      3 SAX解析XML文檔

      SAX(XML簡單應(yīng)用程序接口)是一個公共的基于事件的XML文檔解析標(biāo)準(zhǔn)[2]。SAX提供了一種對XML文檔進(jìn)行順序訪問的模式,這是一種快速讀寫XML數(shù)據(jù)的方式。當(dāng)使用SAX解析器對XML文檔進(jìn)行解析時,會觸發(fā)一系列的事件,并激活相應(yīng)的事件處理函數(shù),從而完成對XML文檔的訪問,所以SAX接口也被稱作事件驅(qū)動接口。

      與DOM比較而言,SAX是一種輕量型的方法。在處理DOM的時候,需要讀入整個XML文檔,再在內(nèi)存中創(chuàng)建DOM樹,生成DOM樹上的每個Node對象。當(dāng)文檔比較小的時候,這不會造成什么問題,但是一旦文檔大起來,處理DOM就會變得相當(dāng)費時費力。特別是其對于內(nèi)存的需求,也將是成倍的增長,以至于在某些應(yīng)用中使用DOM是一件很不劃算的事(如在Applet中)。這時候,一個較好的替代解決方法就是SAX。

      SAX解析XML示例

      SAXParserFactory factory = SAXParserFactory.newInstance();

      SAXParser parser = factory.newSAXParser();

      XMLReader reader = parser.getXMLReader();

      reader.setContentHandler(defaultHandle);

      reader.parse(new InputSource(new FileReader("sample.xml")));

      其中,defaultHandle就是實現(xiàn)了ContentHandler事件處理接口類的一個對象。

      4 JDOM解析XML文檔

      JDOM是一種使用 XML 的獨特 Java 工具包,用于快速開發(fā) XML 應(yīng)用程序。它的設(shè)計包含 Java 語言的語法乃至語義。JDOM的目的是成為Java特定的文檔模型。它簡化與XML的交互,并且比使用DOM實現(xiàn)更快。由于它遵循Pareto 法則,大大簡化了API[3]。

      JDOM 自身不包含解析器。它通常使用 SAX2 解析器來解析和驗證輸入 XML 文檔。它包含一些轉(zhuǎn)換器以將 JDOM 表示輸出成 SAX2 事件流、DOM 模型或 XML 文本文檔。

      JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用具體類而不使用接口,這在某些方面簡化了 API,但也限制了靈活性。其次,API 大量使用了集合類,簡化了那些已經(jīng)熟悉這些類的 Java 開發(fā)者的使用。

      JDOM解析XML示例

      JDOM可以基于DOM或SAX方式解析XML,代碼如下:

      DOMBuilder builder = new DOMBuilder();

      Document doc = builder.build(new File("jdom.xml"));或

      SAXBuilder builder = new SAXBuilder();

      Document doc = builder.build(url);

      5 DOM4J解析XML文檔

      雖然DOM4J代表了完全獨立的開發(fā)結(jié)果,但最初它是 JDOM 的一種智能分支。它合并了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文檔或流化文檔的基于事件的處理[4]。它還提供了構(gòu)建文檔表示的選項,它通過DOM4J API 和標(biāo)準(zhǔn) DOM 接口,具有并行訪問功能。

      為支持這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了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)大和易用的特點,同時也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫 XML,特別值得一提的是連Sun的JAXM也在用DOM4J。

      DOM4J解析XML示例

      DOM4J也可以用DOM或SAX方式解析XML,示例代碼如下:

      SAXReader reader = new SAXReader();

      Document doc = reader.read(xmlFile);或

      DocumentBuilderFactory factory = DocumentBuilderFactory.newDocumentBuilder();

      DocumentBuilder builder = factory.newDocumentBuilder();

      org.w3c.dom.Document document = builder.parse(xmlFile);

      DOMReader reader = new DOMReader();

      org.dom4j.Document doc = reader.read(document);

      6 結(jié)束語

      DOM和SAX解析方法具有通用性,但并不是特別為Java語言設(shè)計的。DOM一次性將XML文件完全讀入內(nèi)存,適用于小體積的XML文件。SAX則基于事件,對于體積較大的XML更能體現(xiàn)出優(yōu)越性。

      JDOM與DOM4J都是為Java特別設(shè)計的,基于DOM或SAX。JDOM簡化了API,對于常用的XML處理相當(dāng)簡潔。DOM4J十分靈活,適用于工具或框架創(chuàng)建者等。

      在實際應(yīng)用中,可以靈活地選擇其中一種,或幾種方法組合起來使用,以發(fā)揮各種方法的優(yōu)點。

      參考文獻(xiàn)

      [1]張銀鶴,冉小,劉制國等.JSP完全自學(xué)手冊[M].北京:清華大學(xué)出版社,2008

      [2]張迪,朱敏,張凌立.基于SAX的XML解析與應(yīng)用[J].計算機(jī)與數(shù)字工程,2008,第7期:103~106

      [3]用JDOM簡化XML編程. http://www.ibm.com/developerworks/cn/java/j-jdom/

      [4] DOM4J. http://www.dom4j.org/

      作者簡介:陳小毛(1983-),女,碩士研究生,研究方向:計算機(jī)控制。

      湯文兵(1967-),男,副教授,碩士研究生導(dǎo)師,研究方向:計算機(jī)控制。

      武宁县| 台中市| 偏关县| 吴堡县| 安多县| 西贡区| 土默特左旗| 恩施市| 江川县| 松阳县| 云阳县| 靖边县| 镇沅| 兰西县| 呼图壁县| 香河县| 项城市| 辽中县| 牟定县| 平南县| 屏东市| 沙坪坝区| 通山县| 安达市| 阿合奇县| 肥城市| 五台县| 上饶市| 门源| 闽侯县| 保靖县| 浮山县| 呼和浩特市| 墨竹工卡县| 泸水县| 望城县| 宣汉县| 兴化市| 拉萨市| 鄂托克前旗| 涞水县|