摘 要 在計(jì)算機(jī)領(lǐng)域,利用Java解析xml文件有著實(shí)際利用價值與現(xiàn)實(shí)意義。文章對XML語言進(jìn)行了簡要的介紹,XML作為簡單的配置文件可以幫助我們更高效地運(yùn)行程序。在介紹了XML的基本概念和主要應(yīng)用的基礎(chǔ)上,進(jìn)一步分析了Java解析XML文檔的兩種主流經(jīng)典方法:一種是文檔對象模型DOM(Document Object Model),另外一種是XML簡單接口SAX(Simple API for XML)。
關(guān)鍵詞 XML作用;XML解析;DOM;Java;SAX
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-7597(2014)06-0120-01
現(xiàn)代社會所使用的程序和數(shù)據(jù)越來越大,對計(jì)算機(jī)硬件的需求標(biāo)準(zhǔn)越來越高。當(dāng)我們用到的數(shù)據(jù)量不大,對硬件的要求不高的時候,我們不希望再使用龐大的數(shù)據(jù)庫,而是希望能夠找到能夠減輕系統(tǒng)負(fù)擔(dān)的方法。XML作為簡單的配置文件可以幫助我們更高效地運(yùn)行程序,它的獨(dú)立于平臺的特性是它最具特色的地方。XML可以將內(nèi)容和表現(xiàn)分離,同一個xml源文檔只寫一次,但可以用不同的方法表現(xiàn)出來。
1 XML概述
1.1 XML簡介
可擴(kuò)展標(biāo)記語言(Extensible Markup Language,XML)是一種標(biāo)記語言,它為文檔編碼格式定義了一系列的標(biāo)準(zhǔn)規(guī)則,這些規(guī)則簡單明了,不論是用戶還是機(jī)器都能夠很容易的識別。XML的設(shè)計(jì)目標(biāo)是為了提高因特網(wǎng)信息的簡潔性、普適性和可用性。盡管XML最初主要用于文檔方面,但是現(xiàn)在它可以被廣泛地應(yīng)用于任意數(shù)據(jù)結(jié)構(gòu)的表示,比如web服務(wù)等。
根據(jù)定義,XML文檔是由一系列字符構(gòu)成。在一個XML文檔中,幾乎每一個合法的Unicode字符都可能出現(xiàn)。XML允許使用任何Unicode-defined編碼,和任何其他也出現(xiàn)在Unicode編碼的字符。XML處理器還提供了一種機(jī)制,可以在沒有任何先驗(yàn)知識的情況下非??煽康卮_定哪些編碼可以使用。
XML文檔由標(biāo)記和內(nèi)容組成,它們可以通過簡單的語法規(guī)則進(jìn)行區(qū)分。一般來說,標(biāo)記以< >作為符號,即
1.2 當(dāng)前XML的主要應(yīng)用
最近幾年已經(jīng)用XML開發(fā)了數(shù)以百計(jì)的文檔格式,包括RSS、Atom、SOAP、XHTML等。基于XML格式的工具已經(jīng)成為許多辦公軟件的默認(rèn)工具,包括微軟辦公室(Office Open XML)、OpenOffice.org、LibreOffice和蘋果的iwork。XML也被用作通信協(xié)議的基本語言,比如XMPP。微軟的應(yīng)用程序使用XML作為配置文件。蘋果公司已經(jīng)實(shí)現(xiàn)了基于XML的注冊。
XML業(yè)已成為互聯(lián)網(wǎng)數(shù)據(jù)通信的主流方式之一。RFC3023規(guī)定了互聯(lián)網(wǎng)媒體用XML發(fā)送信息的構(gòu)造方式。它還定義了以XML設(shè)計(jì)應(yīng)用程序和以XML設(shè)計(jì)文檔的媒體類型。
XML具有如下特色:1)用來進(jìn)行更有意義的搜索;2)開發(fā)靈活的Web應(yīng)用軟件;3)集成不同來源的數(shù)據(jù);4)多種應(yīng)用得到的數(shù)據(jù);5)數(shù)據(jù)的本地計(jì)算和處理;6)數(shù)據(jù)的多樣型顯示;7)數(shù)據(jù)的粒狀更新;8)在Web上發(fā)布數(shù)據(jù);9)升級性;10)開放的標(biāo)準(zhǔn)。
2 Java解析XML的兩種經(jīng)典方法
2.1 DOM:基于對象的XML解析技術(shù)
DOM是用與平臺和語言無關(guān)的方式表示XML文檔的W3C標(biāo)準(zhǔn),它是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合,它是一種基于樹型的解析技術(shù),將XML文檔一次性解析,生成一個位于內(nèi)存中的對象樹用以描述該文檔。
利用Java的DOM解析XML需要經(jīng)過以下幾個步驟:1)得到DOM解析器的工廠實(shí)例;2)從DOM工廠獲得DOM解析器;3)把要解析的XML文檔轉(zhuǎn)化為輸入流;4)解析XML文檔的輸入流;5)得到XML文檔的根節(jié)點(diǎn);6)得到節(jié)點(diǎn)的子節(jié)點(diǎn);7)取得節(jié)點(diǎn)的屬性值;8)輪循子節(jié)點(diǎn)。
2.2 SAX:基于事件驅(qū)動的XML解析技術(shù)
SAX解析器采用了基于事件的模型,與DOM不同的是它并不是由W3C官方所提出的標(biāo)準(zhǔn)。SAX是一種輕量型的方法,它不需要將數(shù)據(jù)全部載入內(nèi)存而只在讀取數(shù)據(jù)時檢查數(shù)據(jù)。對于大型文檔具有顯著優(yōu)勢。它按照XML文件的順序一步一步的來解析,它將XML文檔分解為一系列的事件,由獨(dú)立的事件處理器來決定處理方式。
在JAVA的SAX接口中,事件源是org.xml.sax包中的XMLReader,它通過parser()方法來解析XML文檔,并根據(jù)文檔的內(nèi)容產(chǎn)生事件。而事件處理器則是org.xml.sax包中的ContentHander、DTDHander、ErrorHandler,以及EntityResolver這4個接口,它們分別處理事件源在解析XML文檔過程中產(chǎn)生的不同種類的事件。
2.3 兩種解析方式的對比
SAX解析器是基于事件驅(qū)動的,無需將整個文檔載入內(nèi)存,系統(tǒng)開銷低;不需要獲知整個XML數(shù)據(jù),使用者只需要監(jiān)聽自己感興趣的事件即可,處理速度快。但不能隨機(jī)訪問XML中的節(jié)點(diǎn),只支持順序訪問,而且不能修改文檔。
DOM解析器把XML文檔轉(zhuǎn)化為一個包含其內(nèi)容的樹,將整棵樹讀入內(nèi)存中,可以對樹進(jìn)行遍歷,可以對XML文檔隨機(jī)訪問,可以修改文檔,而且操作要比SAX簡單,容易上手。然而由于使用DOM解析器的時候需要將整個文檔一次性解析完,內(nèi)存代價比較高,相對于SAX解析器,對于大文檔的成本要高得多。
3 總結(jié)
XML具有重要的作用,DOM和SAX這兩種解析技術(shù)也是各有特點(diǎn)。我們在Java平臺上解析時,應(yīng)該根據(jù)不同的需求選擇不同的解析方法。當(dāng)應(yīng)用程序?qū)ξ臋n的修改和隨機(jī)訪問比較多時,可以優(yōu)先考慮DOM解析。SAX是讀取和操作XML數(shù)據(jù)的更快速、更輕量的方法。
參考文獻(xiàn)
[1]李剛.瘋狂XML講義[M].北京:電子工業(yè)出版社,2009.
[2]張迪,朱敏,張凌立.基于SAX的XML解析與應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2008,36(7):103-106.
[3]鄧超,熊選東.一種基于DOM的Web信息提取方法[J].微型電腦應(yīng)用,2007,23(3): 49-52.
[4]邢詒俊.淺談XML解析技術(shù)[J].華南金融電腦,2009(11):51-52.
作者簡介
張潔(1981-),女,鎮(zhèn)江高等職業(yè)技術(shù)學(xué)校二級教師。