SAX是一個順序執行,事件驅動的解析方法(事件驅動,簡單地說就是你點什么按鈕(即產生什么事件))
SAX的工作原理;
1.在文檔的開始和結束時觸發文檔處理事件。 2.在文檔內每一XML元素接受解析的前后觸發元素事件。 3.任何元數據通常由單獨的事件處理 4.在處理文檔的DTD或Schema時產生DTD或Schema事件。 5.產生錯誤事件用來通知主機應用程序解析錯誤。

DOM解析博客地址連接:DOM解析
1,創建解析工廠實例
2,創建解析工廠
3,解析xml
startElement() 回調在每次 SAX 解析器遇到元素的起始標記時被調用
characters() 回調為字符數據所調用
endElement() 為元素的結束標記所調用
DefaultHandler類

代碼如下
package SAX解析;
import java.util.ArrayList;
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;
/**
* SAX解析 1.創建解析工廠
* 2,創建解析工廠實例
* 3,工廠實例來解析XML(本地文件,文件解析器)
*
* @author Administrator
*/
public class SAXDemo {
ArrayList<Student> list;
Student stu;
String strValue;
public static void main(String[] args) throws Exception {
SAXDemo demo = new SAXDemo();
demo.sefa();
}
public void sefa() throws Exception {
//開始時間
long l1=System.currentTimeMillis();
// 創建工廠實例
SAXParserFactory factory = SAXParserFactory.newInstance();
// 創建解析工廠
SAXParser parser = factory.newSAXParser();
String f = "C:\\Users\\Administrator\\Desktop\\xml\\student2.xml";
MyDefaultHandler hb = new MyDefaultHandler();
// 解析XML
parser.parse(f, hb);
long l2= System.currentTimeMillis();
long end =l2-l1;
//1818ms
System.out.println("解析時間:"+end+"ms");
}
/**
* 創建外部類,解析XML startDocument開始讀取文本 startElement開始讀取元素
*/
class MyDefaultHandler extends DefaultHandler {
// 開始讀取文本
public void startDocument() throws SAXException {
System.out.println("開始解析..");
list = new ArrayList<Student>();
}
// 結束文本讀取
public void endDocument() throws SAXException {
// 遍歷隊列
for (Student strs : list) {
System.out.println(strs);
}
System.out.println("解析完成..");
}
// 開始讀取元素
public void startElement(String uri, String localName, String qName,
Attributes attr) throws SAXException {
if (qName.equals("stu")) {
stu = new Student();
list.add(stu);
String nums = attr.getValue("num");
String nos = attr.getValue("no");
if (nums != null) {
stu.num = Integer.parseInt(nums);
}
if (nos != null) {
stu.no = Integer.parseInt(nos);
}
}
}
// 結束元素的讀取
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equals("name")) {
stu.name = strValue;
}
if (qName.equals("sex")) {
stu.sex = strValue;
}
if (qName.equals("cla")) {
stu.cla = strValue;
}
}
// 讀取字符串
public void characters(char ch[], int start, int length)
throws SAXException {
// 創建字符串
strValue = new String(ch, start, length);
}
}
}