说明:
1. sax主要用于对xml文件解析,不能进行crud操作
2. sax使用”推”机制,将解析器发现的内容推送给事件处理器,由用户通过事件处理器决定如何处理。
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;
public class sax {
public static void main(String[] args) throws Exception {
// 1. 创建SAX解析工厂 : SaxParserFactory
// newInstance() 是 SAXParserFactory类 的静态方法
SAXParserFactory spf = SAXParserFactory.newInstance();
// 2. 创建SAX解析器 : SAXParser (抛异常)
SAXParser sp = spf.newSAXParser();
// 3. 将解析对象和事件处理器关联
sp.parse("src/myclass1.xml", new MyDefaultHandler());
}
}
// 定义事件处理类
class MyDefaultHandler extends DefaultHandler{
private boolean isName =false;
private boolean isAge = false;
// 文档开始
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
// xml中元素(…,…,名字,属性)
@Override
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if(qName.equals("名字"))
isName = true;
if(qName.equals("年龄"))
isAge = true;
}
// xml中文本(文档本身,开始位置,长度)
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String con = new String(ch,start,length);
// 去除xml中空行的影响
if(!con.trim().equals("") && (isName||isAge))
System.out.println(con);
isName =false;
isAge = false;
}
// xml 元素结束
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
// 文档结束
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}