使用JAXP進行DOM解析_SAX解析
使用JAXP進行DOM解析_SAX解析
XML解析方式分為兩種:dom和sax
dom:(Document Object Model, 即文件物件模型) 是 W3C 組織推薦的處理 XML 的一種方式。
sax: (Simple API for XML) 不是官方標準,但它是 XML 社群事實上的標準,幾乎所有的 XML 解析器都支援它。
XML解析器
Crimson、Xerces 、Aelfred2
XML解析開發包
Jaxp、Jdom、dom4j
JAXP 開發包是J2SE的一部分,它由javax.xml、org.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 文件,涉及兩個部分:解析器和事件處理器:
解析器可以使用JAXP的API建立,建立出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");
相關文章
- 使用JAXP進行DOM解析( DocumentBuilderFactory、DocumentBuilder、Document)UI
- 使用JAXP進行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory與SAXParser)XML
- jaxp的sax解析操作
- 使用JAXP對xml文件進行DOM解析基礎XML
- DOM解析和SAX解析
- 使用jaxp解析器dom方式對xml節點進行操作XML
- dom解析和sax解析的區別
- Android系列--DOM、SAX、Pull解析XMLAndroidXML
- XML解析的兩種方式DOM和SAXXML
- java使用sax解析xmlJavaXML
- 關於SAX,DOM,JAXP,JDOM,DOM4J的一些理解
- Java解析XML彙總(DOM/SAX/JDOM/DOM4j/XPath)JavaXML
- python使用SAX解析xmlPythonXML
- sax解析例子演示
- JAVA-使用SAX解析XML資料JavaXML
- JAVA與DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 學習筆記二Java筆記
- DOM 解析
- XML解析-最快的方式SAXXML
- XML的四種解析器(dom_sax_jdom_dom4j)原理及效能比較[收藏]XML
- 使用 Swift 進行 JSON 解析SwiftJSON
- DOM解析XMLXML
- 利用JAXP解析xml中遇到的問題XML
- python 解析xml 檔案: SAX方式PythonXML
- Python解析xml大檔案(sax)PythonXML
- 使用dom4j 解析, 操作XMLXML
- 使用Dom4j解析XML案例XML
- DOM 常用 API 解析API
- xml解析之domXML
- XML 檔案解析實踐 (DOM 解析)XML
- 使用acorn對JavaScript程式碼進行解析。JavaScript
- JAVA進行XML解析JavaXML
- SAX無法正確解析日期資料
- 使用DOM解析來實現PHP模版引擎PHP
- DOM解析和優化優化
- PLSQL中的DOM 解析SQL
- 記憶體中html原始碼用IHTMLDocument2進行DOM方式解析記憶體HTML原始碼
- 如何使用Python對引數進行解析Python
- 關於SAX解析xml檔案的問題XML