一、 SAX与 DOM 的比较
a) SAX是 Simple API for XML 的简写,它是一个 XML 解析的标准,也是一组 API (软件包)。它的解析过程是逐行扫描 XML 文档,一种事件驱动模型。它的缺点是对 XML 的读取很方便,解析过程可以随时终止,但是插入、删除等操作很困难。
b) DOM是 Document Object Model 的简写,它把 XML 文档视为一棵树。解析文档之前,必须先把文档全部载入内存之中。因此效率不高,但可以方便的插入,删除等。
二、 SAX的原理:
对文档进行顺序扫描,当扫描到文档的开始与结束、元素的开始与结束等地方时,通知事件处理函数,由事件处理函数作出相应动作,然后继续同样的扫描,直到文档结束。
大多数SAX 实现都会产生以下类型的事件:
1、 在文档的开始和结束时触发文档处理事件;
2、 在文档内每一个XML 元素接受解析的前后触发元素事件;
3、 任何元数据通常都由单独的事件交付;
4、 任何处理文档的DTD 或 schema 时产生的 DTD 或 schema 事件;
5、 产生错误事件用来通知主机应用程序解析错误。
三、 SAX模型
三、 SAX的解析过程
对于如下文档
<doc><para>Hello, world!</para></doc>
解析过程中会产生如下一系列事件:
start document
start element: doc
start element: para
characters: Hello, world!
end element: para
end element: doc
end document
1、创建事件处理器
2、 创建SAX 解析器
3、 将事件处理程序分配给解析器
4、 对文档进行解析,将每个事件分配给处理程序。
四、 SAX的常用接口
a) org.xml.sax.ContentHandler 接口:封装了一些对事件处理的方法:
i. void startDocument()
ii. void endDocument()
iii. startElement(
String uri, // 命名空间的 URI
String localName, // 标签的名字,不包含前缀
String qName, // 标签的名字,包含前缀
Attributes atts // 标签的所有属性
)
iv. endElement(
String uri,
String localName,
String qName)
v. void characters(
char[] ch, // 要解析的字符串
int start, // 开始位置
int length // 长度
)
六、 对元素属性的操作:
在startElement 方法中:
示例程序,对以下XML文件的解析
MyContentHandler.java
Activity