MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0
1 . 什么是SAX
Simple API for XML , 既是指一种接口, 也是指一个软件包
作为接口 , SAX是事件驱动型XML解析的一个标准接口
2 . SAX基本原理
SAX的哦给你工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束.
大多数SAX实现都会产生一下类型的事件
{
在文档的开始和结束时出发文档处理事件
在文档内每一XML元素接受解析的前后触发元素事件
任何元数据通常都由氮素的事件交付
在处理文档的DTD或Schema时产生DTD或Schema事件
产生错误事件用来通知主机应用程序解析错误
}
![Android学习笔记--XML文件解析 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝 Android学习笔记--XML文件解析 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝](http://img.bimg.126.net/photo/hPL-T-HtjiP8sKaEtsBcoQ==/4850939748648234531.jpg)
3 . SAX常用接口
ContentHandler接口
ContentHandler是java类包中一个特殊的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: docA: 创建事件处理程序
Start element: para
Characters: Hello World!B: 创建SAX解析器
End element: para
End element: docC: 将事件处理程序分配给解析器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 {
Simple API for XML , 既是指一种接口
作为接口 , SAX
2 . SAX基本原理
SAX的哦给你工作原理简单地说就是对文档进行顺序扫描
大多数SAX
{
在文档的开始和结束时出发文档处理事件
在文档内每一XML
任何元数据通常都由氮素的事件交付
在处理文档的DTD
产生错误事件用来通知主机应用程序解析错误
}
![Android学习笔记--XML文件解析 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝 Android学习笔记--XML文件解析 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝](http://img.bimg.126.net/photo/hPL-T-HtjiP8sKaEtsBcoQ==/4850939748648234531.jpg)
3 . SAX常用接口
ContentHandler接口
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
Start element: para
Characters: Hello World!
End element: para
End element: doc
End document
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 {