方式
XML是一種通用的數(shù)據(jù)交換格式,它的平臺(tái)無關(guān)性捺典、語言無關(guān)性蚣录、系統(tǒng)無關(guān)性任连、給數(shù)據(jù)集成與交互帶來了極大的方便蒙具。XML在不同的語言環(huán)境中解析方式都是一樣的,只不過實(shí)現(xiàn)的語法不同而已站叼。
XML的解析方式分為四種:1娃兽、DOM解析;2尽楔、SAX解析投储;3第练、JDOM解析;4玛荞、DOM4J解析复旬。其中前兩種屬于基礎(chǔ)方法,是官方提供的平臺(tái)無關(guān)的解析方式冲泥;后兩種屬于擴(kuò)展方法驹碍,它們是在基礎(chǔ)的方法上擴(kuò)展出來的,只適用于java平臺(tái)凡恍。
針對(duì)以下XML文件志秃,會(huì)對(duì)四種方式進(jìn)行詳細(xì)描述:
復(fù)制代碼
XML
復(fù)制代碼
一、DOM解析
DOM的全稱是Document Object Model嚼酝,也即文檔對(duì)象模型浮还。在應(yīng)用程序中,基于DOM的XML分析器將一個(gè)XML文檔轉(zhuǎn)換成一個(gè)對(duì)象模型的集合(通常稱DOM樹)闽巩,應(yīng)用程序正是通過對(duì)這個(gè)對(duì)象模型的操作钧舌,來實(shí)現(xiàn)對(duì)XML文檔數(shù)據(jù)的操作。通過DOM接口涎跨,應(yīng)用程序可以在任何時(shí)候訪問XML文檔中的任何一部分?jǐn)?shù)據(jù)洼冻,因此,這種利用DOM接口的機(jī)制也被稱作隨機(jī)訪問機(jī)制隅很。
DOM接口提供了一種通過分層對(duì)象模型來訪問XML文檔信息的方式撞牢,這些分層對(duì)象模型依據(jù)XML的文檔結(jié)構(gòu)形成了一棵節(jié)點(diǎn)樹。無論XML文檔中所描述的是什么類型的信息叔营,即便是制表數(shù)據(jù)屋彪、項(xiàng)目列表或一個(gè)文檔,利用DOM所生成的模型都是節(jié)點(diǎn)樹的形式绒尊。也就是說畜挥,DOM強(qiáng)制使用樹模型來訪問XML文檔中的信息。由于XML本質(zhì)上就是一種分層結(jié)構(gòu)婴谱,所以這種描述方法是相當(dāng)有效的蟹但。
DOM樹所提供的隨機(jī)訪問方式給應(yīng)用程序的開發(fā)帶來了很大的靈活性,它可以任意地控制整個(gè)XML文檔中的內(nèi)容勘究。然而矮湘,由于DOM分析器把整個(gè)XML文檔轉(zhuǎn)化成DOM樹放在了內(nèi)存中,因此口糕,當(dāng)文檔比較大或者結(jié)構(gòu)比較復(fù)雜時(shí)缅阳,對(duì)內(nèi)存的需求就比較高。而且,對(duì)于結(jié)構(gòu)復(fù)雜的樹的遍歷也是一項(xiàng)耗時(shí)的操作十办。所以秀撇,DOM分析器對(duì)機(jī)器性能的要求比較高,實(shí)現(xiàn)效率不十分理想向族。不過呵燕,由于DOM分析器所采用的樹結(jié)構(gòu)的思想與XML文檔的結(jié)構(gòu)相吻合,同時(shí)鑒于隨機(jī)訪問所帶來的方便件相,因此再扭,DOM分析器還是有很廣泛的使用價(jià)值的。
優(yōu)點(diǎn):
1夜矗、形成了樹結(jié)構(gòu)泛范,有助于更好的理解、掌握紊撕,且代碼容易編寫罢荡。
2、解析過程中对扶,樹結(jié)構(gòu)保存在內(nèi)存中区赵,方便修改。
缺點(diǎn):
1浪南、由于文件是一次性讀取笼才,所以對(duì)內(nèi)存的耗費(fèi)比較大。
2逞泄、如果XML文件比較大患整,容易影響解析性能且可能會(huì)造成內(nèi)存溢出拜效。
以下是解析代碼:
復(fù)制代碼
DOM
復(fù)制代碼
二喷众、SAX解析
SAX的全稱是Simple APIs for XML,也即XML簡(jiǎn)單應(yīng)用程序接口紧憾。與DOM不同到千,SAX提供的訪問模式是一種順序模式,這是一種快速讀寫XML數(shù)據(jù)的方式赴穗。當(dāng)使用SAX分析器對(duì)XML文檔進(jìn)行分析時(shí)憔四,會(huì)觸發(fā)一系列事件,并激活相應(yīng)的事件處理函數(shù)般眉,應(yīng)用程序通過這些事件處理函數(shù)實(shí)現(xiàn)對(duì)XML文檔的訪問了赵,因而SAX接口也被稱作事件驅(qū)動(dòng)接口。
優(yōu)點(diǎn):
1甸赃、采用事件驅(qū)動(dòng)模式柿汛,對(duì)內(nèi)存耗費(fèi)比較小。
2埠对、適用于只處理XML文件中的數(shù)據(jù)時(shí)络断。
缺點(diǎn):
1裁替、編碼比較麻煩。
2貌笨、很難同時(shí)訪問XML文件中的多處不同數(shù)據(jù)弱判。
以下是解析代碼:
復(fù)制代碼
SAX
復(fù)制代碼
三、JDOM解析
特征:
1锥惋、僅使用具體類昌腰,而不使用接口。
2膀跌、API大量使用了Collections類剥哑。
以下是解析代碼:
復(fù)制代碼
JDOM
復(fù)制代碼
4、DOM4J解析
? 特征:
1淹父、JDOM的一種智能分支株婴,它合并了許多超出基本XML文檔表示的功能。
2暑认、它使用接口和抽象基本類方法困介。
3、具有性能優(yōu)異蘸际、靈活性好座哩、功能強(qiáng)大和極端易用的特點(diǎn)。
4粮彤、是一個(gè)開放源碼的文件
以下是解析代碼:
復(fù)制代碼
DOM4J
復(fù)制代碼
Final:比較總結(jié)
DOM4J性能最好根穷,連Sun的JAXM也在用DOM4J。目前許多開源項(xiàng)目中大量采用DOM4J导坟,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件屿良。如果不考慮可移植性,那就采用DOM4J惫周。
? ? JDOM和DOM在性能測(cè)試時(shí)表現(xiàn)不佳尘惧,在測(cè)試10M文檔時(shí)內(nèi)存溢出。在小文檔情況下還值得考慮使用DOM和JDOM递递。雖然JDOM的開發(fā)者已經(jīng)說明他們期望在正式發(fā)行版前專注性能問題喷橙,但是從性能觀點(diǎn)來看,它確實(shí)沒有值得推薦之處登舞。另外贰逾,DOM仍是一個(gè)非常好的選擇。DOM實(shí)現(xiàn)廣泛應(yīng)用于多種編程語言菠秒。它還是許多其它與XML相關(guān)的標(biāo)準(zhǔn)的基礎(chǔ)疙剑,因?yàn)樗将@得W3C推薦(與基于非標(biāo)準(zhǔn)的Java模型相對(duì)),所以在某些類型的項(xiàng)目中可能也需要它(如在JavaScript中使用DOM)。
? ? SAX表現(xiàn)較好核芽,這要依賴于它特定的解析方式-事件驅(qū)動(dòng)囚戚。一個(gè)SAX檢測(cè)即將到來的XML流,但并沒有載入到內(nèi)存(當(dāng)然當(dāng)XML流被讀入時(shí)轧简,會(huì)有部分文檔暫時(shí)隱藏在內(nèi)存中)驰坊。