国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java與XML聯合編程之DOM篇

2019-11-18 10:48:43
字體:
來源:轉載
供稿:網友

  DOM初步
  DOM是Document Object Model的縮寫,即文檔對象模型。前面說過,xml將數據組織為一顆樹,所以DOM就是對這顆樹的一個對象描敘。通俗的說,就是通過解析XML文檔,為XML文檔在邏輯上建立一個樹模型,樹的節點是一個個對象。我們通過存取這些對象就能夠存取XML文檔的內容。
  下面我們來看一個簡單的例子,看看在DOM中,我們是如何來操作一個XML文檔的。
  這是一個XML文檔,也是我們要操作的對象:
  
  
  Good-bye serialization, hello java!
  

  下面,我們需要把這個文檔的內容解析到一個個的Java對象中去供程序使用,利用JAXP,我們只需幾行代碼就能做到這一點。首先,我們需要建立一個解析器工廠,以利用這個工廠來獲得一個具體的解析器對象:
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  我們在這里使用DocumentBuilderFacotry的目的是為了創建與具體解析器無關的程序,當DocumentBuilderFactory類的靜態方法newInstance()被調用時,它根據一個系統變量來決定具體使用哪一個解析器。又因為所有的解析器都服從于JAXP所定義的接口,所以無論具體使用哪一個解析器,代碼都是一樣的。所以當在不同的解析器之間進行切換時,只需要更改系統變量的值,而不用更改任何代碼。這就是工廠所帶來的好處。這個工廠模式的具體實現,可以參看下面的類圖。
  DocumentBuilder db = dbf.newDocumentBuilder();
  當獲得一個工廠對象后,使用它的靜態方法newDocumentBuilder()方法可以獲得一個DocumentBuilder對象,這個對象代表了具體的DOM解析器。但具體是哪一種解析器,微軟的或者IBM的,對于程序而言并不重要。
  然后,我們就可以利用這個解析器來對XML文檔進行解析了:
  Document doc = db.parse("c:/xml/message.xml");
  DocumentBuilder的parse()方法接受一個XML文檔名作為輸入參數,返回一個Document對象,這個Document對象就代表了一個XML文檔的樹模型。以后所有的對XML文檔的操作,都與解析器無關,直接在這個Document對象上進行操作就可以了。而具體對Document操作的方法,就是由DOM所定義的了。
   Java與XML聯合編程之DOM篇
  Jaxp支持W3C所推薦的DOM 2。假如你對DOM很熟悉,那么下面的內容就很簡單了:只需要按照DOM的規范來進行方法調用就可以。當然,假如你對DOM不清楚,也不用著急,后面我們會有具體的介紹。在這兒,你所要知道并牢記的是:DOM是用來描敘XML文檔中的數據的模型,引入DOM的全部原因就是為了用這個模型來操作XML文檔的中的數據。DOM規范中定義有節點(即對象)、屬性和方法,我們通過這些節點的存取來存取XML的數據。
  從上面得到的Document對象開始,我們就可以開始我們的DOM之旅了。使用Document對象的getElementsByTagName()方法,我們可以得到一個NodeList對象,一個Node對象代表了一個XML文檔中的一個標簽元素,而NodeList對象,觀其名而知其意,所代表的是一個Node對象的列表:
  NodeList nl = doc.getElementsByTagName("message");
  我們通過這樣一條語句所得到的是XML文檔中所有標簽對應的Node對象的一個列表。然后,我們可以使用NodeList對象的item()方法來得到列表中的每一個Node對象:
  Node my_node = nl.item(0);
  當一個Node對象被建立之后,保存在XML文檔中的數據就被提取出來并封裝在這個Node中了。在這個例子中,要提取Message標簽內的內容,我們通常會使用Node對象的getNodeValue()方法:
  String message = my_node.getFirstChild().getNodeValue();
  請注重,這里還使用了一個getFirstChild()方法來獲得message下面的第一個子Node對象。雖然在message標簽下面除了文本外并沒有其它子標簽或者屬性,但是我們堅持在這里使用getFirseChild()方法,這主要和W3C對DOM的定義有關。W3C把標簽內的文本部分也定義成一個Node,所以先要得到代表文本的那個Node,我們才能夠使用getNodeValue()來獲取文本的內容。
  現在,既然我們已經能夠從XML文件中提取出數據了,我們就可以把這些數據用在合適的地方,來構筑應用程序。
  下面的內容,我們將更多的關注DOM,為DOM作一個較為具體的解析,使我們使用起來更為得心應手。
  DOM詳解
  1.基本的DOM對象
  DOM的基本對象有5個:Document,Node,NodeList,Element和Attr。下面就這些對象的功能和實現的方法作一個大致的介紹。
  [[The No.5 Picture.]]
  Document對象代表了整個XML的文檔,所有其它的Node,都以一定的順序包含在Document對象之內,排列成一個樹形的結構,程序員可以通過遍歷這顆樹來得到XML文檔的所有的內容,這也是對XML文檔操作的起點。我們總是先通過解析XML源文件而得到一個Document對象,然后再來執行后續的操作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高台县| 大冶市| 普兰店市| 余江县| 隆化县| 九龙县| 平江县| 大化| 凌云县| 昌吉市| 陆川县| 无锡市| 东城区| 深水埗区| 合川市| 道真| 河西区| 遵义市| 沙田区| 肇庆市| 拜泉县| 连州市| 隆尧县| 茶陵县| 高陵县| 太湖县| 霸州市| 若羌县| 康马县| 沙洋县| 兴安县| 永春县| 武隆县| 大关县| 施甸县| 武平县| 定日县| 拉萨市| 蒲江县| 海南省| 贵溪市|