3.8 Java與XML聯(lián)合編程之DOM篇
DOM是Document Object Model的縮寫,即文檔對象模型。前面說過,XML將數(shù)據(jù)組織為一顆樹,所以DOM就是對這顆樹的一個對象描敘。通俗的說,就是通過解析XML文檔,為XML文檔在邏輯上建立一個樹模型,樹的節(jié)點是一個個對象。我們通過存取這些對象就能夠存取XML文檔的內(nèi)容。
下面我們來看一個簡單的例子,看看在DOM中,我們是如何來操作一個XML文檔的。
這是一個XML文檔,也是我們要操作的對象:
Good-bye serialization, hello Java!
下面,我們需要把這個文檔的內(nèi)容解析到一個個的Java對象中去供程序使用,利用JAXP,我們只需幾行代碼就能做到這一點。首先,我們需要建立一個解析器工廠,以利用這個工廠來獲得一個具體的解析器對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
我們在這里使用DocumentBuilderFacotry的目的是為了創(chuàng)建與具體解析器無關(guān)的程序,當(dāng)DocumentBuilderFactory類的靜態(tài)方法newInstance()被調(diào)用時,它根據(jù)一個系統(tǒng)變量來決定具體使用哪一個解析器。又因為所有的解析器都服從于JAXP所定義的接口,所以無論具體使用哪一個解析器,代碼都是一樣的。所以當(dāng)在不同的解析器之間進(jìn)行切換時,只需要更改系統(tǒng)變量的值,而不用更改任何代碼。這就是工廠所帶來的好處。這個工廠模式的具體實現(xiàn),可以參看下面的類圖。
DocumentBuilder db = dbf.newDocumentBuilder();
當(dāng)獲得一個工廠對象后,使用它的靜態(tài)方法newDocumentBuilder()方法可以獲得一個DocumentBuilder對象,這個對象代表了具體的DOM解析器。但具體是哪一種解析器,微軟的或者IBM的,對于程序而言并不重要。
然后,我們就可以利用這個解析器來對XML文檔進(jìn)行解析了:
Document doc = db.parse("c:/xml/message.xml");
DocumentBuilder的parse()方法接受一個XML文檔名作為輸入?yún)?shù),返回一個Document對象,這個Document對象就代表了一個XML文檔的樹模型。以后所有的對XML文檔的操作,都與解析器無關(guān),直接在這個Document對象上進(jìn)行操作就可以了。而具體對Document操作的方法,就是由DOM所定義的了。
Jaxp支持W3C所推薦的DOM 2。如果你對DOM很熟悉,那么下面的內(nèi)容就很簡單了:只需要按照DOM的規(guī)范來進(jìn)行方法調(diào)用就可以。當(dāng)然,如果你對DOM不清楚,也不用著急,后面我們會有詳細(xì)的介紹。在這兒,你所要知道并牢記的是:DOM是用來描敘XML文檔中的數(shù)據(jù)的模型,引入DOM的全部原因就是為了用這個模型來操作XML文檔的中的數(shù)據(jù)。DOM規(guī)范中定義有節(jié)點(即對象)、屬性和方法,我們通過這些節(jié)點的存取來存取XML的數(shù)據(jù)。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |