- 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 解析器 - 概述
SAX(Simple API for XML)是一种基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。SAX 是 XML 的流式接口,这意味着使用 SAX 的应用程序每次都会接收有关正在处理元素和属性的 XML 文档的事件通知,从文档的顶部开始,到文档的结束为止。根元素。
从上到下读取 XML 文档,识别构成格式良好的 XML 文档的标记。
令牌的处理顺序与它们在文档中出现的顺序相同。
向应用程序报告解析器在出现时遇到的标记的性质。
应用程序提供必须向解析器注册的“事件”处理程序。
识别令牌后,将使用相关信息调用处理程序中的回调方法。
何时使用?
您应该在以下情况下使用 SAX 解析器:
您可以从上到下以线性方式处理 XML 文档。
该文档没有深度嵌套。
您正在处理一个非常大的 XML 文档,其 DOM 树会消耗太多内存。典型的 DOM 实现使用 10 个字节的内存来表示 1 个字节的 XML。
所要解决的问题只涉及XML文档的一部分。
解析器一看到数据就可用,因此 SAX 非常适合通过流到达的 XML 文档。
SAX 的缺点
我们无法随机访问 XML 文档,因为它是以只进方式处理的。
如果您需要跟踪解析器已看到的数据或更改项目的顺序,则必须自行编写代码并存储数据。
内容处理器接口
该接口指定 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 strings(char[] ch, int start, int length) - 遇到字符数据时调用。
void ignorableWhitespace( char[] ch, int start, int length) - 当存在 DTD 且遇到可忽略的空白时调用。
voidprocessingInstruction(String target, String data) - 当识别处理指令时调用。
void setDocumentLocator(Locator locator)) - 提供可用于识别文档中位置的定位器。
void SkippedEntity(String name) - 当遇到未解析的实体时调用。
void startPrefixMapping(String prefix, String uri) - 定义新的命名空间映射时调用。
void endPrefixMapping(String prefix) - 当命名空间定义结束其范围时调用。
属性接口
该接口指定处理连接到元素的属性的方法。
int getLength() - 返回属性的数量。
字符串 getQName(int 索引)
字符串 getValue(int 索引)
字符串 getValue(字符串 qname)