使用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的sax解析操作
- 使用JAXP對xml文件進行DOM解析基礎XML
- 使用jaxp解析器dom方式對xml節點進行操作XML
- dom解析和sax解析的區別
- sax解析例子演示
- XML解析-最快的方式SAXXML
- DOM 常用 API 解析API
- XML 檔案解析實踐 (DOM 解析)XML
- 使用DOM解析來實現PHP模版引擎PHP
- 使用cJSON庫對JSON格式進行解析JSON
- Python XML解析之DOMPythonXML
- XML DOM 解析器概述XML
- React-原始碼解析-DOM模型React原始碼模型
- XML DOM 解析器錯誤概述XML
- 什麼是域名解析?如何進行域名解析設定?
- 基於 DOM 的 XML 檔案解析類XML
- css載入會阻塞DOM樹解析嗎?CSS
- 為什麼要進行域名解析?域名解析怎麼設定?
- java的XML解析(DOM4J技術)JavaXML
- Vue3 DOM Diff 核心演算法解析Vue演算法
- Androidxml資料的讀取和寫入(sax,pull,dom,xstream,jsoup)AndroidXMLJS
- DOM4J 解析 XML 之忽略轉義字元XML字元
- 原始配置字串進行解析並轉換為字典字串
- JSON資料如何進行解析呢,方式有哪些?JSON
- 深入解析Express下采用bcryptjs進行密碼加密ExpressJS密碼加密
- Golang Http 庫指定 dns 伺服器進行解析GolangHTTPDNS伺服器
- 透過Requests模組獲取網頁內容並使用BeautifulSoup進行解析網頁
- 使用go語言對csv檔案進行解析處理,匯入匯出。Go
- 如何進行動態ip的域名解析設定?
- flutter AnimatedPositionedDirectional 使用解析Flutter
- Android 進階之HandlerThread 使用場景及原始碼解析Androidthread原始碼
- 模仿vue自己動手寫響應式框架(三) - dom解析Vue框架
- 關於HTML文件解析中DOM樹的構建猜測HTML
- 恆訊科技分析域名怎麼進行繫結解析呢?
- 使用 JavaScript 上傳 PDF 和 Excel 等二進位制檔案到 ABAP 伺服器並進行解析JavaScriptExcel伺服器
- 使用 Acorn 來解析 JavaScriptJavaScript
- mysql count()的使用解析MySql
- 使用 Python 解析引數Python
- Apache 使用fcgi 解析PHPApachePHP