Java StAX解析器


StAX是一個基於JAVA API用於解析XML文件,類似SAX解析器的方式。但兩種API之間有兩個區別

  • StAX是PULL API,其中作為SAX是PUSH API。這意味著如果StAX解析器,用戶端應用程式需要詢問StAX解析器從XML獲取資訊它所需要的,但如果是SAX解析器,用戶端應用程式需要獲取資訊時,SAX解析器會通知用戶端應用程式的資訊是可用的。

  • StAX的API可以讀取和寫入XML文件。使用SAX API,XML可以是唯讀的。

環境設定

為了使用StAX的解析器,應該準備好stax.jar在應用程式的類路徑中。下載 stax-1.2.0.jar.

以下是StAX API的功能

  • 讀取XML檔案從上到下,認識構成一個結構完整的XML文件的標記

  • 令牌是以相同的順序進行處理,它們出現在文件中

  • 報告應用程式,因為解析器遇到標記的特性

  • 應用程式提供了一個“事件”讀取器充當了事件,以獲得所需資訊的疊代器和疊代。可另一個讀取器是“游標”充當一個指向XML節點。

  • 由於事件被識別,XML元素可以從事件物件進行檢索,並且可以進一步處理。

什麼情況下使用?

應該使用的StAX解析器的時候:

  • 可以處理在自上而下線性方式的XML文件。

  • 檔案並不深入巢狀。

  • 處理一個非常大的XML文件的DOM樹會占用太多的記憶體。典型的DOM的實現使用10位元組的儲存器以表示XML的一個位元組。

  • 要解決的問題涉及XML文件的一部分。

  • 資料是可用的,只要它是由解析器處理,這樣StAX可以很好地用於所收到超過資料流的XML文件。

SAX的缺點

  • 因為它是在一個處理的方式,而不是隨機存取XML文件。

  • 如果需要跟蹤的資料分析器已經看到或更改專案的順序,必須編寫程式碼和資料儲存以自己方式處理。

XMLEventReader類

因為在解析XML文件時該類提供可用於迭代事件事件迭代器

  • StartElement asStartElement() - 用於檢索值和元素的屬性。

  • EndElement asEndElement() - 呼叫元件的端部。

  • Characters asCharacters() - 可用於獲得字元,例如一個CDATA,空白等。

XMLEventWriter類

此介面指定建立事件的方法。

  • add(Event event) - 新增包含元素XML事件。

XMLStreamReader Class

因為在解析XML文件時該類提供可用於迭代事件事件迭代器

  • int next() - 用於檢索下一個事件。

  • boolean hasNext() - 用於檢查其他事件的存在與否

  • String getText() - 用於獲取一個元素的文字

  • String getLocalName() - 用於獲取一個元素的名稱

XMLStreamWriter類

此介面指定建立事件的方法

  • writeStartElement(String localName) - 加入定名稱開始元素。

  • writeEndElement(String localName) - 新增指定名稱的結束元素。

  • writeAttribute(String localName, String value) - 編寫屬性到元素。