1.Sax解析原理
SAX解析: 優(yōu)勢:內(nèi)存占用非常小抛猫。加載一點(diǎn)卖宠,解析一點(diǎn),處理一點(diǎn)二打,接著釋放內(nèi)存。
2.Sax解析的功能
SAXParser類: 解析器對象(類似于dom4j SAXReader)
|- parse(File f, DefaultHandler dh): 方法掂榔。用于解析xml文件
File: 指定讀取的xml文件
DefaultHandler: 事件處理程序的默認(rèn)基類继效。
DefaultHandler類:
startDocument() : 開始文檔時觸發(fā)的方法
startElement(String uri, String localName, String qName, Attributes attributes) 遇到開始標(biāo)簽觸發(fā)的方法
characters(char[] ch, int start, int length) 遇到文本內(nèi)容觸發(fā)的方法
endElement(String uri, String localName, String qName) 遇到結(jié)束標(biāo)簽
endDocument() 結(jié)束文檔時觸發(fā)的方法
3.Sax解析xml的步驟
public static void main(String[] args) throws Exception {
//基于SAX解析讀取xml文件
//創(chuàng)建解析的對象
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
//2.調(diào)用parse方法,讀取和解析xml文件
/**
* 參數(shù)一: 指定的文件地址
*/
File file = new File("contact.xml");
/**
* 參數(shù)二: 指定DefaultHandler的子類
*/
saxParser.parse(file,new MyDefaultHander());
}
MyDefaultHander 繼承 DefaultHandler
public class MyDefaultHander extends DefaultHandler {
//遇到文檔就開始解析
@Override
public void startDocument() throws SAXException {
System.out.println("MyDefaultHandler.startDocument()");
}
//遇到開始標(biāo)簽
/*
qName 當(dāng)前遇到的標(biāo)簽名稱
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("MyDefaultHandler.startElement()"+qName);
}
/**
* 遇到文本內(nèi)容(包括空格換行)
* @param ch : 表示整個xml文檔所有文本內(nèi)容
* @param start: 表示當(dāng)前讀到的文本內(nèi)容的開始位置
* @param length: 表示當(dāng)前讀到的文本內(nèi)容的長度
*/
@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);
}
/**
* 遇到結(jié)束標(biāo)簽
* @param qName: 表示當(dāng)前讀取的結(jié)束標(biāo)簽名稱
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("MyDefaultHandler.endElement()-->"+qName);
}
/**
* 遇到結(jié)束文檔時
*/
@Override
public void endDocument() throws SAXException {
System.out.println("MyDefaultHandler.endDocument");
}
}