- 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。 |