首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

android xml资料解析 SAX

2012-08-28 
android xml文件解析 SAXXML文件解析XML:可扩展标记语言。有DOM和SAX两种解析方式,下面介绍SAX解析方式SAX:

android xml文件解析 SAX
XML文件解析
XML:可扩展标记语言。
有DOM和SAX两种解析方式,下面介绍SAX解析方式
SAX:
一、什么是SAX
全称:Simple API for XML,既是指一种接口,又是指一个软件包。
作为接口,SAX是事件驱动型XML解析的一个标准接口。
它是一个标准,用来解析XML文档。基于这项标准有各种各样的实现方法,有C++版本d 实现、JAVA版本的实现。
优点:
1、逐行扫描文档,一边扫描一边解析
2、可以在解析文档的任意时刻来停止解析
缺点:
1、操作复杂
2、添加或删除内容比较麻烦
二、SAX基本原理
SAX的工作原理简单地说是对文档的顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
大多数SAX实现都会产生以下类型的事件:
a)、在文档的开始和结束时触发文档处理事件。
b)、在文档内每一XML元素接受解析的前后触发元素事件
c)、任何元数据通常都由单独的事件交付
d)、在处理文档的DTD或Schema时产生DTD或Schema事件
e)、产生错误事件用来通知主机应用程序解析错误






三、SAX常用接口
每次产生一个事件都会触发相应的函数,我们要做的事情就是在这些函数里面写上处理元素的代码。
最常用的接口有ContentHandler。
ContentHandler是Java类包中一个特殊SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素的开头和结束、以及元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。
ContentHandler接口的方法有以下几种:
返回值、方法名描述备注
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)当读取标签中间的内容时调用

二、SAX解析示例
示例1:解析一个从网上下载下来的.xml文件,并在控制台输出解析出来的内容。
布局文件:



文件解析类:

Activity类:
package android.xml.sax;import java.io.IOException;import java.io.Reader;import java.io.StringReader;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import android.app.Activity;import android.os.Bundle;import android.utils.HttpDownloader;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class XMLSAXTest extends Activity {    /** Called when the activity is first created. */private Button parseButton = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                parseButton = (Button)findViewById(R.id.parseButton);        parseButton.setOnClickListener(new ParesButtonOnClickListener());    }        class ParesButtonOnClickListener implements OnClickListener{public void onClick(View v) {// TODO Auto-generated method stubHttpDownloader hd = new HttpDownloader();String resultStr = hd.download("http://dl5.csdn.net/fd.php?i=768128918158274&s=5a92e2d55af5561a2bb3c16216cc2771");System.out.println("resultStr: "+resultStr);try {//创建一个SAXParesFactory工厂对象SAXParserFactory factory = SAXParserFactory.newInstance();//创建一个XMLReader对象XMLReader xmlReader = factory.newSAXParser().getXMLReader();//为XMLReader设置内容处理器xmlReader.setContentHandler(new MyContentHandler());//开始解析文件xmlReader.parse(new InputSource(new StringReader(resultStr)));} catch (Exception e) {e.printStackTrace();}}    }}


除此之外还需要上传文件的类,前面已经写过了在这里就不贴代码了


项目源码已经上传,有需要的可以下载。

热点排行