简述
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口
SAX API是一个基于事件的API
SAX分析XML时触发一系列事件,并激活相应的事件处理函数,
应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX也被称作事件驱动
SAX API主要的四种处理事件的接口
ContentHandler
DTDHandler
EntityResolver
ErrorHandler
优缺点
当解析器发现元素开始,元素结束,文本,文档的开始或结束等时,发送事件,
程序员编写响应这些事件的代码,保存数据
优点:
不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小
使用场合Applet下载
缺点:
不是持久的,事件过后,若没保存数据,那么数据就丢了;
无状态性,从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合只需XML文档的少量内容,很少回头访问;机器内存少
解析XML
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student no="1001">
<name>lwc</name>
<sex>boy</sex>
<age>18</age>
</student>
<student no="1002">
<name>lwc</name>
<sex>boy</sex>
<age>18</age>
</student>
</students>
案例
package com.itlwc.action;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
class MyHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
System.out.println("parse began");
}
@Override
public void endDocument() throws SAXException {
System.out.println("parse finished");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("start element : " + qName);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("finish element : " + qName);
}
}
public class TestSax {
public static void main(String[] args) throws Exception {
// 获得SAX解析器工厂实例
SAXParserFactory factory = SAXParserFactory.newInstance();
// 获得SAX解析器实例
SAXParser parser = factory.newSAXParser();
// 开始进行解析
parser.parse(new File("student.xml"), new MyHandler());
}
}
/*
打印结果:
parse began
start element : students
start element : student
start element : name
finish element : name
start element : sex
finish element : sex
start element : age
finish element : age
finish element : student
start element : student
start element : name
finish element : name
start element : sex
finish element : sex
start element : age
finish element : age
finish element : student
finish element : students
parse finished
*/