- Apache Xerces 教程
- Xerces 主頁
- XML 概述
- Xerces 環境設定
- XML 解析器
- Xerces DOM 解析器
- Xerces DOM 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Xerces SAX 解析器
- Xerces SAX 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Xerces StAX 解析器
- Xerces StAX 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Xerces 有用資源
- Xerces - 快速指南
- Xerces - 有用資源
- Xerces - 討論
SAX 解析器 - 概述
SAX(XML 的簡單 API)是一種基於事件的 XML 文件解析器。與 DOM 解析器不同,SAX 解析器不建立解析樹。SAX 是 XML 的流式介面,這意味著使用 SAX 的應用程式會收到有關正在處理的 XML 文件的事件通知 - 每次一個元素和屬性,按順序從文件頂部開始,以 ROOT 元素的關閉結束。
從上到下讀取 XML 文件,識別構成格式良好的 XML 文件的標記。
標記按其在文件中出現的順序進行處理。
嚮應用程式報告解析器遇到的標記的性質,並在其發生時報告。
應用程式提供一個“事件”處理程式,該處理程式必須向解析器註冊。
當識別出標記時,處理程式中的回撥方法將使用相關資訊被呼叫。
何時使用?
您應該在以下情況下使用 SAX 解析器:
您可以從上到下以線性方式處理 XML 文件。
文件巢狀不深。
您正在處理一個非常大的 XML 文件,其 DOM 樹將消耗大量記憶體。典型的 DOM 實現使用十個位元組的記憶體來表示一個位元組的 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)) - 提供一個 Locator,可用於識別文件中的位置。
void skippedEntity(String name) - 遇到未解析的實體時呼叫。
void startPrefixMapping(String prefix, String uri) - 定義新的名稱空間對映時呼叫。
void endPrefixMapping(String prefix) - 名稱空間定義結束其作用域時呼叫。
Attributes 介面
此介面指定用於處理與元素關聯的屬性的方法。
int getLength() - 返回屬性的數量。
String getQName(int index)
String getValue(int index)
String getValue(String qname)