事件编程模式三要求:
事件源:xml文件
事件:解析到开始标签(包含属性),解析到结束标签,解析文本内容
监听器:DefaultHandler
public class demo02 {
public static void main(String[] args) throws Exception, SAXException {
//1)创建SAXParser解析对象
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
//2)解析xml文件
/**
* 参数一: 需要解析的xml文件
* 参数二: 指定的DefaultHandler
*/
//类似于注册监听器
parser.parse(new File("./src/contact.xml"), new MyDefaultHandler1());
}
}
public class MyDefaultHandler1 extends DefaultHandler{
/**
* 遇到xml文档的开始位置触发此方法
*/
@Override
public void startDocument() throws SAXException {
System.out.println("开始读取xml文档");
}
/**
* 遇到每个开始标签触发次方法
* @param qName: 表示当前读到的开始标签名称
* @param attributes : 属性列表
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("开始读取到该标签:"+qName);
}
/**
* 遇到每个结束标签时触发此方法
* @param qName: 当前读到的结束标签名称
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("读到该标签尾:"+qName);
}
/**
* 遇到文本内容触发此方法
* 如何获取当前读到的内容?
* char[]: 表示到目前为止读到的文本内容
* start: 表示当前内容的起始位置
* length: 表示当前内容的长度
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
/**
* char[]内容:标签里的内容
* start:标签内容起始标签
* length:标签内容长度
*/
//获取当前读到的内容
String content = new String(ch,start,length);
System.out.println("读到的标签内容:"+content);
}
/**
* 遇到xml文档 的结尾
*/
@Override
public void endDocument() throws SAXException {
System.out.println("整个文档读取完闭");
}
}