本文主要介绍了Android中XML解析的两种常见方式——DOM和SAX解析器,着重讲解了SAX解析的原理和使用方法,并提到了Android SDK提供的DefaultHandler和DefaultHandler2工具类。 在Java中,XML解析有两种主流方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器在解析XML文档时,会一次性将整个文档加载到内存中,形成一个树形结构。这种方式对于内存有限的设备,如Android手机,不适用,因为大文件可能导致内存溢出。 相比之下,SAX解析器采用了事件驱动的方式。在解析XML文档过程中,每当遇到开始标签、结束标签、其他节点或内容时,都会触发相应的事件回调。这些事件由XMLReader对象通过调用parser()方法来触发,并且有四个关键的事件处理器接口:ContentHandler、DTDHandler、ErrorHandler和EntityResolver。ContentHandler处理与XML文档内容相关的事件,DTDHandler处理文档的DTD(Document Type Definition)事件,ErrorHandler处理解析过程中遇到的错误,而EntityResolver则负责处理外部实体。 Android SDK为了简化XML解析,提供了DefaultHandler类,它已经实现了上述四个事件处理器接口,因此开发者可以直接使用DefaultHandler来处理XML解析事件。此外,DefaultHandler2继承自DefaultHandler,增加了对命名空间的支持,能够处理更复杂的XML事件。 在实际使用中,我们通常会按照以下步骤设置SAX解析器: 1. 创建一个SAXParserFactory实例。 2. 使用SAXParserFactory创建SAXParser对象。 3. 从SAXParser获取XMLReader对象。 4. 实现DefaultHandler或者DefaultHandler2。 5. 将自定义的Handler设置到XMLReader中。 6. 使用XMLReader的parse()方法解析XML文档。 7. 在解析过程中,DefaultHandler的回调方法会被调用,处理XML内容。 例如,解析一个简单的XML文件,如“minXML”文件,其中包含多个人员信息,可以创建一个继承自DefaultHandler的自定义处理器类,如MinHandler,通过重写handleElement()等方法来处理XML数据并存储到内存中。 通过SAX解析XML,开发者可以实现按需处理数据,有效地降低了内存消耗,特别适合处理大型XML文件。而Android SDK提供的DefaultHandler使得XML解析过程变得更加简单和高效。
android里面可以使用SAX进行解析.SAX是基于事件驱动的。在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其他节点与内容时候也会回调一个事件。在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口.ContentHander用于处理跟XML文档相关的事件,DTDHander用于处理对文档的DTD进行解析时产生的事件,ErrorHandler用于处理XML文档产生的错误,EntityResolver用于处理外部实体.值得注意的是,在使用ContentHandler时,他在这个包下:org.xml.sax.*而通常我们在解析XML时会与网络发生交互,常常会导入以下这个包:
import java.net.*;
在这个包下面也有一个ContentHandler,这样会发生错误.
更为方便的是android SDK中提供了DefaultHandler和DefaultHandler2 来协助我们完成构建XML handler,事实上DefaultHandler本身实现了 ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口,相当于把这几个接口做了一次集成,而DefaultHandler2继承自DefaultHandler,可以用来处理更加丰富的事件.我们常常使用DefaultHandler来作为事件处理handler.常用的处理过程如下:
1:创建一个SAXParserFactory对象
2: 根据SAXParserFactory.newSAXParser()方法返回一个SAXParser解析器
3:根据SAXParser解析器获取事件源对象XMLReader
4:实例化一个DefaultHandler对象
5:连接事件源对象XMLReader到事件处理类DefaultHandler中
6:调用XMLReader的parse方法从输入源中获取到的xml数据
7:通过DefaultHandler返回我们需要的数据集合。
接下来以一个小例子来介绍这种解析方式:
首先在assets目录下创建一个名为min的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="0">
<name>min</name>
<age>30</age>
<person id="1">
<name>malone</name>
<age>25</age>
</person>
</persons>
创建一个类public class MinHandler extends DefaultHandler ,里面定义三个私有数据成员:
private List<Person> persons;
private Person person;
private String preTag;
一个内部类Person,包含三个数据成员:
private String name;
private int age;
private Integer id;
生成其set和get方法.
重写以下方法:
@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全