- SAX解析是流解析器,使用的事件回调机制。内存中不会保存XML内容,因此只能读取,不能进行修改获取田间等操作。
- 事件接口:
public interface ContentHandler
{
// 文档解析开始时,触发该回调
public void startDocument () throws SAXException;
// 文档解析完成后,触发该回调
public void endDocument() throws SAXException;
// 开始解析特定元素时,触发该事件
public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException;
// 元素解析完成后,触发该事件
public void endElement (String uri, String localName, String qName) throws SAXException;
// 解析到文本节点
public void characters (char ch[], int start, int length) throws SAXException;
}
一般不直接使用该接口,而是使用该接口的一个实现类DefaultHandler,只重写自己需要的事件函数即可。
3. 基本用法
// 获取工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 获取解析器
SAXParser parser = factory.newSAXParser();
// 开始解析,需要两个参数,一个XML资源,一个事件处理器【匿名内部类】
parser.parse(new File("src/test.xml"), new DefaultHandler(){
// 重写了方法,localName表示节点的名称,不带命名空间和前缀等信息
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
System.out.println(uri);
System.out.println(localName);
System.out.println(qName);
}
});
- 主要类以及接口说明
- SAXParserFactory: 解析器工厂
一个静态方法:
public static SAXParserFactory newInstance():获取工厂实例
一个成员方法:
public SAXParser newSAXParser(): 获取解析器 - SAXParser:解析器类:
主要就是parse方法,需要两个参数,一个XML资源,一个处理器
- SAXParserFactory: 解析器工厂