xml 解析的四種方式

方式

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)存中)驰坊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哮独,隨后出現(xiàn)的幾起案子拳芙,更是在濱河造成了極大的恐慌,老刑警劉巖皮璧,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟扎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悴务,警方通過查閱死者的電腦和手機(jī)睹限,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讯檐,“玉大人羡疗,你說我怎么就攤上這事”鸷椋” “怎么了叨恨?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挖垛。 經(jīng)常有香客問我痒钝,道長(zhǎng),這世上最難降的妖魔是什么痢毒? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任送矩,我火速辦了婚禮,結(jié)果婚禮上闸准,老公的妹妹穿的比我還像新娘姥闪。我一直安慰自己昧穿,他們只是感情好颁褂,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布弊仪。 她就那樣靜靜地躺著掷豺,像睡著了一般暇检。 火紅的嫁衣襯著肌膚如雪吓蘑。 梳的紋絲不亂的頭發(fā)上悼潭,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天钥顽,我揣著相機(jī)與錄音义屏,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闽铐,可吹牛的內(nèi)容都是我干的蝶怔。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼兄墅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼踢星!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起隙咸,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤沐悦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后五督,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藏否,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年充包,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了副签。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡基矮,死狀恐怖继薛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愈捅,我是刑警寧澤遏考,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蓝谨,受9級(jí)特大地震影響灌具,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜譬巫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一咖楣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芦昔,春花似錦诱贿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凭豪,卻和暖如春焙蹭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫂伞。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工孔厉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拯钻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓撰豺,卻偏偏與公主長(zhǎng)得像粪般,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子污桦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容