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-),男,副教授,碩士研究生導師,研究方向:計算機控制。

主站蜘蛛池模板: 日韩在线第三页| 一级做a爰片久久免费| 中文字幕永久在线看| 日本91视频| 曰韩人妻一区二区三区| 91在线视频福利| 天堂成人av| 国产免费福利网站| 中文字幕永久视频| 狠狠干欧美| 国产人人干| 国产网友愉拍精品视频| 国产一级精品毛片基地| 欧美色视频网站| 制服丝袜国产精品| 国产微拍一区二区三区四区| 亚洲一级毛片在线观播放| 亚洲AⅤ无码国产精品| 91久久国产综合精品| 欧美日韩国产在线观看一区二区三区| 狠狠做深爱婷婷久久一区| 欧美日韩精品综合在线一区| 中文字幕在线播放不卡| 园内精品自拍视频在线播放| 欧美色视频在线| 日韩精品无码免费专网站| 精品视频一区二区观看| 亚洲精品视频免费看| 久热中文字幕在线观看| 成人av专区精品无码国产| 成人午夜久久| 亚洲精品福利网站| 人人妻人人澡人人爽欧美一区| 亚亚洲乱码一二三四区| 99手机在线视频| 成人在线天堂| 无码又爽又刺激的高潮视频| 亚洲自拍另类| 青青国产成人免费精品视频| 国产成人1024精品| 高清亚洲欧美在线看| 国产精品无码久久久久久| 欧美国产日韩在线播放| 亚洲欧美成人综合| 一级一毛片a级毛片| 欧美日韩精品一区二区视频| 色综合天天视频在线观看| 91偷拍一区| 孕妇高潮太爽了在线观看免费| 日韩精品亚洲一区中文字幕| 日本国产一区在线观看| 亚洲丝袜中文字幕| 一级爱做片免费观看久久| 婷婷亚洲视频| 国产不卡网| 99在线视频网站| 国产精品短篇二区| 亚洲一级毛片在线观| 天堂在线亚洲| 免费av一区二区三区在线| 丁香婷婷综合激情| 在线欧美日韩| 99这里只有精品免费视频| 特黄日韩免费一区二区三区| 国产成人综合久久精品尤物| 色视频国产| 国产va视频| 欧美a√在线| 永久免费无码日韩视频| 91精品免费久久久| 久久熟女AV| 国产免费一级精品视频| 美女免费精品高清毛片在线视| 色AV色 综合网站| 国产真实自在自线免费精品| 中文字幕欧美日韩| 奇米影视狠狠精品7777| 久久公开视频| 97视频精品全国免费观看| 免费毛片视频| AV不卡在线永久免费观看| 97国产在线观看|