XML解析技術的介紹
1.四種常見的XML解析技術
2.SAX解析方式
SAX(simple API for XML)是一種XML解析的替代方法。相比於DOM,SAX是一種速度更快,更有效的方法。它逐行掃描文件,一邊掃描一邊解析。而且相比於DOM,SAX可以在解析文件的任意時刻停止解析。
其優缺點分別為:
優點: 解析可以立即開始,速度快,佔用記憶體少
缺點: 不能對節點做修改
適用於資料量較大的XML
DOM解析方式
DOM:(Document Object Model, 即文件物件模型) 是 W3C 組織推薦的處理 XML 的一種方式。DOM解析器在解析XML文件時,會把文件中的所有元素,按照其出現的層次關係,解析成一個個Node物件(節點)。
其優缺點分別為:
優點:把xml檔案在記憶體中構造樹形結構,可以遍歷和修改節點
缺點: 如果檔案比較大,記憶體有壓力,解析的時間會比較長
適用於多次訪問XML
dom4j
DOM4J是dom4j.org出品的一個開源XML解析包
優點:是一個易用的、開源的庫。
它應用於Java平臺,採用了Java集合框架並完全支援DOM,SAX。
最大的特色是使用大量的介面
讀寫XML文件主要依賴於org.dom4j.io包,其中提供DOMReader和SAXReader兩類不同方式
3.DOM4J讀取XML API
SAXReader讀取XML文件
使用SAXReader需要匯入dom4j-1.6.1.jar包。其是DOM4J的一個核心API,用於讀取XML文件。
DOM4J是一個Java的XML API,用來讀寫XML檔案的。DOM4J是一個非常非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體。
3.1建立SAXReader來讀取XML文件。
SAXReader reader = new SAXReader();
3.2使用SAXReader讀取了一個指定的檔案,呼叫的方法是:
Document reader(File file)
該方法會讀取給定的檔案,並將其封裝到一個名為Document的物件中。
3.3通過Document獲取Element
Document 物件是一棵文件樹的物件,可為我們提供對文件資料的最初(或最頂層)的訪問入口。
當我們得到Document後就相當於我們得到了XML描述的整個樹結構。那麼我們就來開始解析的第一步工作,獲取根元素。
獲取根元素前,我們需要一個叫Element的類。Element用於描述XML中的一個元素。元素可包含屬性、其他元素或文字。如果元素含有文字,則在文字節點中表示該文字。
3.4獲取根元素
Document的方法:
Element getRootElement()
用來獲取當前XML文件中的根元素。
3.5Element
element方法
當我們通過解析XML得到一個Element物件時,如何獲取該物件所表示的元素的一些相關資訊呢?
其中Element提供了一個方法:
Element element(String name)
該方法用於獲取當前元素下指定名字的子元素。如果當前元素下包含若干個同名子元素,那麼element方法會獲取該元素中第一個子元素。
如果我們希望獲取當前元素下所有同名的子元素,我們可以使用elements方法。
elements方法
Element提供了另一個方法用於獲取當前元素下所有子元素,其方法為:
List elements()
elements還有過載方法,比如我們希望獲取當前元素下同名的所有子元素時,我們可以使用:
List elements(String name)
該方法會獲取當前元素下所有給定名字的子元素。
getName方法
Element提供了一個方法,用於獲取當前元素的名字:
String getName()
getText方法
Element提供了一個方法,用於獲取元素的文字節點(起始標記與結束標記之間的文字內容)
String getText()
Element提供了一個方法,用於獲取指定元素的文字
String elementText(String name)
attribute方法
Element的attribute方法用於獲取當前元素的屬性資訊,其方法定義為:
Attribute attribute(int index)
獲取當前元素的指定屬性,index為索引,從0開始。
Attribute attribute(String name)
獲取當前元素的指定名字的屬性。
3.6Attribute
Attribute類的每一個例項用於描述一個元素中的某個屬性資訊。根據該物件我們通常會獲取其對應的屬性名與屬性值的資訊
getName方法
String getName() : 獲取屬性的名字
getValue方法
String getValue() : 獲取屬性的值