1.Sax解析原理
SAX解析: 优势:内存占用非常小。加载一点,解析一点,处理一点,接着释放内存。
2.Sax解析的功能
SAXParser类: 解析器对象(类似于dom4j SAXReader)
|- parse(File f, DefaultHandler dh): 方法。用于解析xml文件
File: 指定读取的xml文件
DefaultHandler: 事件处理程序的默认基类。
DefaultHandler类:
startDocument() : 开始文档时触发的方法
startElement(String uri, String localName, String qName, Attributes attributes) 遇到开始标签触发的方法
characters(char[] ch, int start, int length) 遇到文本内容触发的方法
endElement(String uri, String localName, String qName) 遇到结束标签
endDocument() 结束文档时触发的方法
3.Sax解析xml的步骤
public static void main(String[] args) throws Exception {
//基于SAX解析读取xml文件
//创建解析的对象
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
//2.调用parse方法,读取和解析xml文件
/**
* 参数一: 指定的文件地址
*/
File file = new File("contact.xml");
/**
* 参数二: 指定DefaultHandler的子类
*/
saxParser.parse(file,new MyDefaultHander());
}
MyDefaultHander 继承 DefaultHandler
public class MyDefaultHander extends DefaultHandler {
//遇到文档就开始解析
@Override
public void startDocument() throws SAXException {
System.out.println("MyDefaultHandler.startDocument()");
}
//遇到开始标签
/*
qName 当前遇到的标签名称
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("MyDefaultHandler.startElement()"+qName);
}
/**
* 遇到文本内容(包括空格换行)
* @param ch : 表示整个xml文档所有文本内容
* @param start: 表示当前读到的文本内容的开始位置
* @param length: 表示当前读到的文本内容的长度
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content = new String(ch,start,length);
System.out.println("MyDefaultHandler.characters()-->"+content);
}
/**
* 遇到结束标签
* @param qName: 表示当前读取的结束标签名称
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("MyDefaultHandler.endElement()-->"+qName);
}
/**
* 遇到结束文档时
*/
@Override
public void endDocument() throws SAXException {
System.out.println("MyDefaultHandler.endDocument");
}
}
网友评论