999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java解析XML的方法比較研究

2009-08-19 09:01:44陳小毛湯文兵
中國新技術新產品 2009年15期

陳小毛 湯文兵

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

關鍵詞:JAVA;XML;DOM;SAX;JDOM;DOM4J

1 引言

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

2 DOM解析XML文檔

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

2.1 DOM 設計的局限性

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

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

接口驅動。公共 DOM API 僅由接口組成(Exception 類是個例外)。W3C對提供實現并不感興趣,它只對定義接口感興趣。但它也意味著作為 Java 程序員使用 API 在創建 XML 對象時增加了分散程度,因為W3C標準大量使用工廠化的類和類似的靈活的但不直接的模式。在某些應用中,XML文檔是僅由語法分析器建立的,而從不會由應用程序級代碼建立,這是不相關的。但隨著 XML 更廣泛的使用,并不是所有問題都繼續需要由語法分析器來驅動。應用程序的開發人員需要一個更方便的方法有計劃地構造 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簡單應用程序接口)是一個公共的基于事件的XML文檔解析標準[2]。SAX提供了一種對XML文檔進行順序訪問的模式,這是一種快速讀寫XML數據的方式。當使用SAX解析器對XML文檔進行解析時,會觸發一系列的事件,并激活相應的事件處理函數,從而完成對XML文檔的訪問,所以SAX接口也被稱作事件驅動接口。

與DOM比較而言,SAX是一種輕量型的方法。在處理DOM的時候,需要讀入整個XML文檔,再在內存中創建DOM樹,生成DOM樹上的每個Node對象。當文檔比較小的時候,這不會造成什么問題,但是一旦文檔大起來,處理DOM就會變得相當費時費力。特別是其對于內存的需求,也將是成倍的增長,以至于在某些應用中使用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就是實現了ContentHandler事件處理接口類的一個對象。

4 JDOM解析XML文檔

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

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

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

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代表了完全獨立的開發結果,但最初它是 JDOM 的一種智能分支。它合并了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文檔或流化文檔的基于事件的處理[4]。它還提供了構建文檔表示的選項,它通過DOM4J API 和標準 DOM 接口,具有并行訪問功能。

為支持這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的集合類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是它提供了比JDOM大得多的靈活性。

在添加靈活性、XPath集成和對大文檔處理的目標時,DOM4J的目標與JDOM是一樣的:針對Java開發者的易用性和直觀操作。它還致力于成為比 JDOM更完整的解決方案,實現在本質上處理所有Java/XML問題的目標。在完成該目標時,它比JDOM更少強調防止不正確的應用程序行為。

DOM4J是一個非常優秀的Java XML API,具有性能優異、功能強大和易用的特點,同時也是一個開放源代碼的軟件。如今你可以看到越來越多的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 結束語

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

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

在實際應用中,可以靈活地選擇其中一種,或幾種方法組合起來使用,以發揮各種方法的優點。

參考文獻

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

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

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

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

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

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

主站蜘蛛池模板: 国产综合无码一区二区色蜜蜜| 欧洲欧美人成免费全部视频| 性色一区| 国产sm重味一区二区三区| 国产精品久久自在自线观看| 97人妻精品专区久久久久| 国产精品成人一区二区| 国产黄视频网站| 国产精品视频白浆免费视频| 一区二区自拍| 一本久道久久综合多人 | 亚洲精品第一页不卡| 成年人福利视频| 国产女人喷水视频| 欧美国产在线看| 欧美国产综合视频| 国产精品思思热在线| 狠狠干综合| a级免费视频| 99国产精品国产| 欧美在线视频a| 黄色在线不卡| 亚洲第一色视频| 综合色88| 亚洲爱婷婷色69堂| 亚洲中文字幕23页在线| 国产91成人| 亚洲欧美在线综合图区| 国产91高清视频| 国产乱人乱偷精品视频a人人澡| 欧美成人一区午夜福利在线| 色综合色国产热无码一| 97国产在线观看| 日韩高清欧美| 亚洲第一在线播放| 国产成年女人特黄特色毛片免| 91午夜福利在线观看| 亚洲一区二区无码视频| 91精品国产麻豆国产自产在线| 亚洲天堂成人| 日韩高清中文字幕| 亚洲综合片| 日韩成人高清无码| 天堂网亚洲综合在线| 亚洲视频一区| 日韩美女福利视频| 青青草国产精品久久久久| 白丝美女办公室高潮喷水视频| 亚洲全网成人资源在线观看| 午夜精品福利影院| 成人无码区免费视频网站蜜臀| 国产永久在线视频| 成人免费视频一区| 中国国产A一级毛片| 一区二区三区四区在线| 亚洲日本中文字幕天堂网| 91视频国产高清| 国产精品色婷婷在线观看| 久久精品嫩草研究院| 亚洲愉拍一区二区精品| 国产91精选在线观看| 四虎成人精品| 国产香蕉97碰碰视频VA碰碰看 | 精品国产美女福到在线直播| vvvv98国产成人综合青青| 宅男噜噜噜66国产在线观看| 一级毛片无毒不卡直接观看| 欧美有码在线| 免费xxxxx在线观看网站| 日韩精品无码一级毛片免费| 亚洲成人动漫在线| 伊人久久久大香线蕉综合直播| 欧美精品啪啪| 久久综合一个色综合网| 成人精品免费视频| 亚洲三级影院| 亚洲男人的天堂视频| 亚洲人成网址| 国产精品免费p区| 日韩在线视频网| 91久久偷偷做嫩草影院| 国产成年女人特黄特色毛片免 |