使用JAXP進行DOM解析_SAX解析

我是喬同學發表於2012-10-11

使用JAXP進行DOM解析_SAX解析

XML解析方式分為兩種:domsax

dom(Document Object Model, 即文件物件模型) W3C 組織推薦的處理 XML 的一種方式。

sax (Simple API for XML) 不是官方標準,但它是 XML 社群事實上的標準,幾乎所有的 XML 解析器都支援它。

XML解析器

CrimsonXerces Aelfred2

XML解析開發包

JaxpJdomdom4j

JAXP 開發包是J2SE的一部分,它由javax.xmlorg.w3c.dom org.xml.sax 包及其子包組成

javax.xml.parsers 包中,定義了幾個工廠類,程式設計師呼叫這些工廠類,可以得到對xml文件進行解析的 DOM SAX 的解析器物件。

 

使用JAXP進行DOM解析

javax.xml.parsers 包中的DocumentBuilderFactory用於建立DOM模式的解析器物件, DocumentBuilderFactory是一個抽象工廠類,它不能直接例項化,但該類提供了一個newInstance方法,這個方法會根據本地平臺預設安裝的解析器,自動建立一個工廠的物件並返回。

獲得JAXP中的DOM解析器

呼叫 DocumentBuilderFactory.newInstance() 方法得到建立 DOM 解析器的工廠。

 

呼叫工廠物件的 newDocumentBuilder方法得到 DOM 解析器物件。

 

呼叫 DOM 解析器物件的 parse() 方法解析 XML 文件,得到代表整個文件的 Document 物件,進行可以利用DOM特性對整個XML文件進行操作了。

DOM程式設計

DOM模型(document object model)

DOM解析器在解析XML文件時,會把文件中的所有元素,按照其出現的層次關係,解析成一個個Node物件(節點)

dom中,節點之間關係如下:

位於一個節點之上的節點是該節點的父節點(parent)

一個節點之下的節點是該節點的子節點(children

同一層次,具有相同父節點的節點是兄弟節點(sibling

一個節點的下一個層次的節點集合是節點後代(descendant)

父、祖父節點及所有位於節點上面的,都是節點的祖先(ancestor)

Node物件

Node物件提供了一系列常量來代表結點的型別,當開發人員獲得某個Node型別後,就可以把Node節點轉換成相應的節點物件(Node的子類物件),以便於呼叫其特有的方法。(檢視API文件)

Node物件提供了相應的方法去獲得它的父結點或子結點。程式設計人員通過這些方法就可以讀取整個XML文件的內容、或新增、修改、刪除XML文件的內容了。

DOM方式解析XML檔案

DOM解析程式設計

遍歷所有節點

查詢某一個節點

刪除結點

更新結點

更新XML文件

 

新增節點javax.xml.transform包中的Transformer類用於把代表XML檔案的Document物件轉換為某種格式後進行輸出,例如把xml檔案應用樣式表後轉成一個html文件。利用這個物件,當然也可以把Document物件又重新寫入到一個XML檔案中。

Transformer類通過transform方法完成轉換操作,該方法接收一個源和一個目的地。我們可以通過:

javax.xml.transform.dom.DOMSource類來關聯要轉換的document物件,

javax.xml.transform.stream.StreamResult 物件來表示資料的目的地。

 Transformer物件通過TransformerFactory獲得。

SAX解析

 

在使用 DOM 解析 XML 文件時,需要讀取整個 XML 文件,在記憶體中構架代表整個 DOM 樹的Doucment物件,從而再對XML文件進行操作。此種情況下,如果 XML 文件特別大,就會消耗計算機的大量記憶體,並且容易導致記憶體溢位。

 

SAX解析允許在讀取文件的時候,即對文件進行處理,而不必等到整個文件裝載完才會文件進行操作。

SAX採用事件處理的方式解析XML檔案,利用 SAX 解析 XML 文件,涉及兩個部分:解析器和事件處理器:

解析器可以使用JAXPAPI建立,建立出SAX解析器後,就可以指定解析器去解析某個XML文件。

解析器採用SAX方式在解析某個XML文件時,它只要解析到XML文件的一個組成部分,都會去呼叫事件處理器的一個方法,解析器在呼叫事件處理器的方法時,會把當前解析到的xml檔案內容作為方法的引數傳遞給事件處理器。

事件處理器由程式設計師編寫,程式設計師通過事件處理器中方法的引數,就可以很輕鬆地得到sax解析器解析到的資料,從而可以決定如何對資料進行處理。

SAX方式解析XML文件

使用SAXParserFactory建立SAX解析工廠

SAXParserFactory spf = SAXParserFactory.newInstance();

通過SAX解析工廠得到解析器物件        

SAXParser sp = spf.newSAXParser();

通過解析器物件得到一個XML的讀取器

XMLReader xmlReader = sp.getXMLReader();

設定讀取器的事件處理器          

xmlReader.setContentHandler(new BookParserHandler());

解析xml檔案      

xmlReader.parse("book.xml");

 

 

相關文章