對XML文檔進行解析和數據提取,目前有兩大主流技術:DOM(Document Object Model)和SAX(Simple API for XML)。
(一)DOM
DOM可以看作一組API,它把HTML文檔、XML文檔等看成是一個文檔對象,在接口裏面存放的是對這些文檔操作的屬性和方法的定義。若編程語言實現了這些屬性和方法,就可以對文檔對象中的數據進行存取,並且利用程序對數據做進一步處理。DOM規範的核心是樹模型,對於要解析的XML文檔,首先利用DOM解析器加載到內存中,在內存中爲XML文件建立邏輯形式的樹。
根據 DOM,XML 文檔中的每個成分都是一個節點。DOM 是這樣規定的:
& 整個文檔是一個文檔節點(document)
& 每個 XML 標籤是一個元素節點(element)
& 包含在 XML 元素中的文本是文本節點(Text)
& 每一個 XML 屬性是一個屬性節點(attribute)
& 註釋屬於註釋節點(notation)
另外在 DOM 處理中一個普遍的錯誤是,認爲元素節點包含文本。其實元素節點的文本是存儲在文本節點中的。在這個例子中:<year>2005</year>,元素節點 <year>,擁有一個值爲 "2005" 的文本節點。"2005" 不是 <year> 元素的值。
利用DOM進行解析,掌握:樹型結構的思想,上述結點類型(nodetype),輔之以接口中的屬性方法,一切就easy了。下面使用DOM對book.xml進行遍歷解析:
(二)SAX
SAX不是W3C官方標準,但應用的絲毫不比DOM少。它有兩個主要特點:1)在處理DOM的時候需要將整個XML文檔加載到內存,不適合處理大文檔。而SAX是一種輕量型方法,可以解析任意大小的文件。2)SAX以流的方式讀取XML文件到內存,是事件驅動的。文檔的讀入過程就是SAX的解析過程。
SAX的核心是事件處理機制。當用SAX把一個要解析的XML文件調入內存時,需要對該XML文件讀取,當讀到一個開始標記時,就會觸發一個事件,並調用與該事件相應的方法來處理這個事件。解析器遇到XML文件的開始標記、空白字符、結束標記、標記內容等都會觸發相應的事件。
同樣遍歷book.xml:
SAX只是順序檢查XML文檔中的字節流,並觸發相應事件。而對於事件處理函數本身,則要應用程序自己實現。但是對於只需要訪問數據的應用來說,SAX效率是更高的。一般可以將DOM和SAX優勢結合使用,用SAX獲取相應數據,用DOM根據新的需要形成一個XML文件。
運行結果:
The Topic is :書庫
種類--歷史
標題:上下五千年
作者:王強
出版日期:2005
價格:30.00元
種類--小說
標題:中國,你好
作者:孫靜
出版日期:2005
價格:29.99元
種類--計算機
標題:如何成爲一個程序員
作者:姜俊傑
出版日期:2006
價格:49.99元