Java SAX解析器

SAX(針對XML的簡單API)是基於事件為XML文檔的解析器。不像DOM解析器,SAX解析器創建沒有解析樹。 SAX是一個流介面用於XML的,這意味著使用SAX應用接收事件通知有關XML文檔被處理的元素,屬性,在按順序每次開始在文檔的頂部,並與所述閉合結束根元素。

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

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

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

  • 應用程式提供了必須的解析器註冊的“事件”處理程式

  • 作為標記標識,在處理程式回調方法相關資訊調用

什麼時候使用?

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

  • 可以在XML文檔從上往下處理以線性方式

  • 該檔並不深層次嵌套

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

  • 解決的問題涉及的XML文檔的一部分

  • 數據是可用的,只要它是由解析器看出,這樣的SAX可以很好地用於到達流的XML文檔

SAX的缺點

  • 它是在一個只進入處理隨機訪問方式XML文檔

  • 如果需要跟蹤的數據分析器已經看到或更改專案的順序,必須自已編寫代碼和數據存儲

ContentHandler介面

此介面指定SAX解析器用來通知XML文檔,已經看到部件應用程式的回調方法。

  • void startDocument() - 調用在一個檔的開頭。

  • void endDocument() - 調用在一個檔的末尾。

  • void startElement(String uri, String localName, String qName, Attributes atts) - 調用在一個元素的開頭。

  • void endElement(String uri, String localName,String qName) - 調用在一個元件的末端。

  • void characters(char[] ch, int start, int length) - 字元數據出現時調用。

  • void ignorableWhitespace( char[] ch, int start, int length) - 當DTD是當前和忽略空白遇到時調用。

  • void processingInstruction(String target, String data) - 當處理指令的認可時調用。

  • void setDocumentLocator(Locator locator)) - 提供可用於識別文檔中的位置的定位器。

  • void skippedEntity(String name) - 一個尚未解決實體遇到時調用。

  • void startPrefixMapping(String prefix, String uri) - 當一個新的命名空間的映射定義調用。

  • void endPrefixMapping(String prefix) - 當一個命名空間定義結束其範圍時調用。

屬性介面

這種介面指定用於處理連接到一個元素的屬性的方法。

  • int getLength() - 返回屬性的數目。

  • String getQName(int index)

  • String getValue(int index)

  • String getValue(String qname)


上一篇: Java DOM解析器 - 修改XML文檔 下一篇: Java SAX解析器 - 解析XML文檔