Android开发之使用DefaultHandler处理XML数据

一、定义规则 XML数据结构定义

请记住上面的定义,后面我会用“标签开始”、“文本”、“标签结束”表示SAX正在处理哪部分XML数据事件模型 为什么这里我要谈到这个,因为SAX处理XML数据是采用事件的形式来处理,下面我们来简单的做个介绍。当我们处理XML数据中遇到一个开始标签后SAX会告诉你“我遇到了一个开始标签,这个标签是XXXX”,等你作出反应后,它会继续往下这时它遇到了一段文本,SAX告诉你“我遇到了一段文本,是XXXX”,然后继续等你作出反应,接着下去就遇到了结束标签,SAX仍然会告诉你“我到了一个结束标签是XXX”。SAX就是以这样的方式将整个XML数据全部处理完。二、为何使用节约内存 这里我要声明我的目标设备是手机,而不是电脑等等。而手机的内存是很小的,同时也十分珍贵。或许你会说现在手机都是1GB、2GB内存,根本不用着想。但是我们既然开发应用,当然是希望使用的人越多越好,而大多数手机设备是没有那么多内存的,所以我们需要尽量使我们开发的应用能够适合于很多的设备。效率高 手机不仅仅有着内存少的缺点,而且本身的CPU处理能力也是相对较慢的。所以我们要让代码的速度更快更快,否则用户就会感觉使用你的应用总是卡顿半天,从而会选择其他更优秀的应用。而SAX在执行效率方面也是很客观的,当然这个前提是你的代码够简洁,而不是把所有逻辑处理任务都放进处理XML数据的方法里面。

三、安卓如何使用DefaultHandler类 这是安卓中内置的用于SAX处理XML的类,但是大多情况下我们都需要继承该类重写部分方法,才能达到处理XML数据的功能。startDocument方法 这是第一个需要重写的方法,,每处理一个XML文档都会响应一次。所以这个方法里可以写需要初始化的代码。startElement方法 这是处理每个节点所触发的方法,通过这个方法你可以直接当前处理的节点的名称以及属性。characters方法 当处理一个节点之间的文本时候触发该方法,但是该方法并不会告诉你当前文本的所属标签,而仅仅是告诉你文本内容。endElement方法 遇到一个节点的结束标签时,将会出发这个方法,并且会传递结束标签的名称。endDocument方法 如果当前的XML文档处理完毕后,将会触发该方法,在此方法内你可以将最终的结果保存并且销毁不需要使用的变量。四、执行流程举例下面我将以下的XML文件为例,说明SAX具体如何处理XML文件。(部分文本因为是中文所以经过了URL编码)

1%3cs%3edsds%3c%2fs%3e%e5%86%85%e5%ae%b911

2. 下面是具体的响应过程

3.通过上面的分析我们可以清楚的看到,它是如何处理XML文档的,下面是列举的一个顺序图:

-> startElement(localName = ‘notic’)-> startElement(localName = ‘id’) 4 1-> characters(ch[] = ‘1’)-> endElement(localName = ‘id’)-> startElement(localName = ‘title’) 7 %3c…-> characters(ch[] = ‘略’) -> endElement(localName = ‘title’) -> startElement(localName = ‘content’)10 %e5…-> characters(ch[] = ‘略’) -> endElement(localName = ‘content’) -> startElement(localName = ‘author’)13 1-> characters(ch[] = ‘1’) -> endElement(localName = ‘author’)-> endElement(localName = ‘notic’)

五、实例

下面我们采用一个实例来学习如何使用SAX解析XML

下面是我们需要解析的XML文档

1%3cs%3edsds%3c%2fs%3e%e5%86%85%e5%ae%b9112013-11-01 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84False2%e6%b5%8b%e8%af%952%e5%86%85%e5%ae%b9222013-11-02 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84True3%e6%b5%8b%e8%af%953%e5%86%85%e5%ae%b9332013-11-03 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84False4%e6%b5%8b%e8%af%954%e5%86%85%e5%ae%b9442013-11-04 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84False5%e6%b5%8b%e8%af%955%e5%86%85%e5%ae%b9552013-11-05 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84False6%e6%b5%8b%e8%af%956%e5%86%85%e5%ae%b9662013-11-06 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84True7%e6%b5%8b%e8%af%956%e5%86%85%e5%ae%b9662013-11-06 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84True8%e6%b5%8b%e8%af%956%e5%86%85%e5%ae%b9662013-11-06 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84True9%e6%b5%8b%e8%af%956%e5%86%85%e5%ae%b9662013-11-06 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84True10%e6%b5%8b%e8%af%956%e5%86%85%e5%ae%b9662013-11-06 12-00-00%e4%bf%a1%e6%81%af%e5%a4%84True

开始继承DefaultHandler类

每天告诉自己我很棒!

Android开发之使用DefaultHandler处理XML数据

相关文章:

你感兴趣的文章:

标签云: