MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0
  1 . 什么是SAX

Simple API for XML , 既是指一种接口 也是指一个软件包
作为接口 , SAX是事件驱动型XML解析的一个标准接口

2 . SAX基本原理

SAX的哦给你工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束.

大多数SAX实现都会产生一下类型的事件
{
在文档的开始和结束时出发文档处理事件
在文档内每一XML元素接受解析的前后触发元素事件
任何元数据通常都由氮素的事件交付
在处理文档的DTDSchema时产生DTDSchema事件
产生错误事件用来通知主机应用程序解析错误
}

Android学习笔记--XML文件解析 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝



3 . SAX常用接口

ContentHandler接口
ContentHandlerjava类包中一个特殊的SAX接口,位于org.xml.sax包中.该接口封装了一些对事件处理的方法,XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束,元素的开头和结束,以及元素中的字符数据等事件.当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件

ContnetHandler接口的方法有以下几种
{
Void startDocument();

Void endDocument();

Void startElement(String  uri , String localName , string qName , Attributes atts)

Void endElement(String uri , String  localName , String qName)

Void characters(char[] ch , int start , int length)
}


4 . SAX解析
解析文档过程
例 : <doc>
<para>Hello World!</para>
</doc>
在解析文档的过程中会产生如下一系列事件

Start document {
Start element: doc A: 创建事件处理程序
Start element: para              
Characters: Hello World!             B: 创建SAX解析器
End element: para
End element: doc C: 将事件处理程序分配给解析器 D: 对文档进行解析 将每个事件发送给处理程序
End document }


  解析样例 :   1 . 声明控件对象(略)
2 . 获得控件对象(略)
3 . 绑定事件(略)
4 . 创建监听器对象 

Public void onClick(View v) {
HttpDownloader hd = new HttpDownloader();
String resultStr = hd.download("XMLURL");
System.out.priintln(resultStr);

Try {
// 创建一个SAXParseFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader = factory.newSAXParser().getXMLReader();
// 为XMLReader设置内容处理器 MyContentHandler
reader.setContentHandler(new MyContenHandler());
// 开始解析文件  字符串构造成reader 之后构造成inputSource
Reader.parse(new InputSource(new StringReader(resultStr)));
} catch (Execption e) {
e.printStackTrace();
}
}

XML文件写法 : 
<wordkers>
<worker id="AQ01">
<name>mark</name>
<sex>male</sex>
<status>manager</status>
<address>New York</address>
<salary>$4000</salary>
<worker id="AQ02">
<name>lily</name>
<sex>female</sex>
<status>assists</status>
<address>H</address>
<salary>$2000</salary>
<worker id="AQ03">
<name>tom</name>
<sex>male</sex>
<status>manager</status>
<address>F</address>
<salary>$5000</salary>
</wordkers>

MyContenHandler的写法 例 : 
Public class MyContenHandler Extends DefaultHandler { // 此处体现了适配器模式
String Name , Sex , Status , Address , Salary
String tagName;

// 开始document
Public void startDocument() throws SAXExecption {
System.out.println("-------begin--------");