background image

SAX 的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档( document)开
始与结束、元素(

element)开始与结束、文档(document)结束等地方时通知事

件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。

5、大多数 SAX 实现都会产生以下类型的事件:

A、在文档的开始和结束时触发文档处理事件。 
B、在文档内每一 XML 元素接受解析的前后触发元素事件。 
C、

 

任何元数据通常都由单独的事件交付。

D、在处理文档的 DTD 或 Schema 时产生 DTD 或 Schema

 

事件。

E、产生错误事件用来通知主机应用程序解析错误。 

6sax 的解析流程

Start document

1

 

)创建事件处理程序。

Start element:doc

2)创建 SAX 解析器。

Start element:para

3)将事件处理程序分配给解析器。

Characters:hello.word! (4)对文档进行解析,将每个事件发送给处理程序
Endelement para
Endement:doc
enddocument

7sax 的优点

1 解析速度快,sax 解析器对文档的解析过程是一种一边解析一边执行的过程
2 内存消耗少,在 sax 解析过程中,无需把文档都加载到内存中。
3contentHandler 可以又都个,使用 sax 解析器,可以注册多个 contentHandler
对象,并执行

8sax 的缺点

必须实现事件处理程序
2 不能随机访问,sax 解析器对文档的解析是顺序进行的
3 不能修改文档,使用 sax 只能读取文档的内容,无方法做到向文档加节点。更不能
删除和修改文档内容。

9contentHandler 接口

ContentHandler 是 Java 类包中一个特殊的 SAX 接口,位于 org.xml.sax 包中。该

接口封装了一些对事件处理的方法,当

XML 解析器开始解析 XML 输入文档时,它会遇到

某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的字符数据等事
件。当遇到这些事件时,

XML 解析器会调用 ContentHandler 接口中相应的方法来响应

该事件。

Contenthandler 接口的方法有以下几种:
Void startDocument()
Void endDocument()
Void startElement(string localName,String aName, Attributer atts);
Void endElement(String uri,string localName.String qName);
Void characters(char[] ch,int start,int length); 

10EntityResolver 接口