1.SAX(Simple Access for XML)API:基于事件驱动的XML处理模型,是一种推模式解析(push-parsing) XML文档的API。
解析程序按读入xml文档事件的顺序解析数据,同时基于所选择的结构调用回调处理函数。
2.SAX处理模型的工作步骤:
(1).实现一个扩展DefaultHandler的类,并为每种类型的结构定义回调方法。
(2).初始化一个新的SAX Parser类,Parser读取XML源文件,并触发DefaultHandler类中所定义的回调方法。
(3).顺序读取XML源文件。
3.SAX处理XML文件过程详解:
(1).创建实现DefaultHandler的XML处理器:
//当分析器到达XML文档末端时调用 public void endDocument(){ …… } //对包含元素的字符数据调用 public void characters(char bur[], int offset, int len){ …… } //每次遇到一个新的开始标记或者元素时调用 public void startElement(String nameSpaceURI, String localName, String realName, Attributes attrs){ …… } //当元素结束时调用 public void endElement(String nameSpaceURI, String localName, String rawName){ …… } }
(2).获取SAX Factory和Parser:
a.创建已实现的Handler类实例:
DefaultHandler handler = new MyImplHandler();
b.获取SAXFactory实例:
SAXParserFactory factory = SAXParserFactory.newInstance();
c.通过SAXFactory创建SAX Parser:
SAXParser parser = factory.newSAXParser();
d.分析XML文件:
parser.parser(XML文件url, handler);
4.SAX处理XML的优点:
SAX最大的优点是不把任何的XML文档一次性装入内存中,而是依次逐步读入,因此相比DOM的解析方式更加快速和轻便。
具体如下:
(1).没有将整个文档读入内存,内存耗费较低,尤其对于大型的文件这是一个非常巨大的优点。
(2). 使用“ 推模式 ”(由文档读入事件来取代处理程序),允许注册多种内容处理器。
5.SAX处理XML的局限和适应场景:
(1).没有内建的文档导航支持
(2).不能随机访问 XML 文档
(3).不支持命名空间
SAX处理XML方式适用于:对 XML 只有读操作的程序(不要用来操作和修改XML 文档)。