
- Java XML 教程
- Java XML 首頁
- Java XML 概述
- Java XML 解析器
- Java DOM 解析器
- Java DOM 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java SAX 解析器
- Java SAX 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- JDOM XML 解析器
- JDOM XML 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java StAX 解析器
- Java StAX 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java XPath 解析器
- Java XPath 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java DOM4J 解析器
- Java DOM4J 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java XML 有用資源
- Java XML - 常見問題解答
- Java XML - 快速指南
- Java XML - 有用資源
- Java XML - 討論
Java SAX 解析器 - 概述
Java SAX (Simple API for XML) 是一種基於事件的解析器,用於解析 XML 文件。與 DOM 解析器不同,SAX 解析器不會建立解析樹。它不會將整個文件載入到記憶體中,而是讀取 XML 文件,並在遇到元素、屬性、文字內容和其他資料項時以事件的形式通知客戶端程式。這些事件由事件處理程式中實現的方法處理。
SAX 解析器做什麼?
SAX 解析器對客戶端程式執行以下操作:
從上到下讀取 XML 文件並識別標記。
按標記出現的順序處理標記。
向解析器報告標記的性質。
根據識別的標記呼叫事件處理程式中的回撥方法。
何時使用 Java SAX 解析器?
在以下情況下,您應該使用 SAX 解析器:
您希望從上到下以線性方式處理 XML 文件。
文件巢狀不深。
您的 XML 文件非常大。
要解決的問題只涉及 XML 文件的一部分。
您擁有流資料(資料在解析器看到後即可使用)。
優點
以下是 Java SAX 解析器的一些優點:
- 佔用記憶體更少
- 它比 DOM 解析器更快。因為我們不需要等待整個文件載入到記憶體中。
- 您仍然可以處理大於系統記憶體的 XML 文件。
缺點
以下是 Java SAX 解析器的一些缺點:
無法隨機訪問 XML 文件。
- 無法建立 XML 文件。
如果要跟蹤解析器已看到的的資料或更改專案的順序,則必須編寫程式碼並自行儲存資料。
ContentHandler 介面
ContentHandler 介面是 org.xml.sax 包中的主要介面。大多數應用程式程式實現此介面以執行基本的解析事件。這些事件包括文件的開始和結束、元素的開始和結束以及字元資料。我們必須實現並註冊一個處理程式才能在 XML 文件中執行任何任務。
有一些內建類,即 DefaultHandler、DefaultHandler2、ValidatorHandler,它們實現了 ContentHandler 介面。我們可以使用這些類來實現我們使用者自定義的處理程式。
此介面指定 SAX 解析器用來通知應用程式程式它已看到的 XML 文件元件的回撥方法。以下是 ContentHandler 介面的方法:
方法 | 描述 |
---|---|
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 介面
Attributes 介面位於 org.xml.sax 包中。此介面用於元素中指定的 XML 屬性列表。以下是 Attributes 介面最常用的方法:
方法 | 描述 |
---|---|
int getLength() | 返回屬性數量。 |
int getIndex(String qName) | 返回屬性在列表中的索引,如果不存在則返回 -1。 |
String getQName(int index) | 按索引返回屬性名稱,如果索引超出範圍則返回 null。 |
String getType(int index) | 按索引返回屬性的型別(“CDATA”、“ID”、“IDREF”等)。 |
String getValue(int index) | 按索引返回屬性的值,如果索引超出範圍則返回 null。 |
String getValue(String qName) | 按名稱返回屬性的值,如果名稱不存在則返回 null。 |