`
61party
  • 浏览: 1114773 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android利用SAX解析XML文件

 
阅读更多

在Android中解析XML文主要有三种方式,分别为Simple API for XML(SAX)、Document Object Model(DOM)和Android附带的PULL解析器。其中SAX是一个解析速度非常快并且占用内存少的XML解析器,非常适合Android手机等移动设备。

SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序。使用SAX的优势在于其解析速度较快,占用内存较少(相对于DOM而言)。而且SAX在解析文件的过程中得到自己需要的信息后可以随时终止解析,并不一定要等文件全部解析完毕。凡事有利必有弊,其劣势在于SAX采用的是流式处理方式,当遇到某个标签的时候,它并不会记录下以前所遇到的标签,也就是说,在处理某个标签的时候,比如在startElement方法中,所能够得到的信息就是标签的名字和属性,至于标签内部的嵌套结构,上层标签、下层标签以及其兄弟节点的名称等等与其结构相关的信息都是不得而知的。实际上就是把XML文件的结构信息丢掉了,如果需要得到这些信息的话,只能你自己在程序里进行处理了。所以相对DOM而言,SAX处理XML文档没有DOM方便,SAX处理的过程相对DOM而言也比较复杂。

使用SAX解析XML文件一般有以下五个步骤:

1、创建一个SAXParserFactory对象(通过类名很容易得知它利用工厂方法模式实现的);

2、调用SAXParserFactory中的newSAXParser方法创建一个SAXParser对象;

3、然后在调用SAXParser中的getXMLReader方法获取一个XMLReader对象;

4、在XMLReader中注册事件处理接口,一般有ContentHandler、ErrorHandler、DTDHandler、EntityHandler四种;

5、调用XMLReader中的parse方法解析指定的XML字符串对象;

步骤四中提到的四个Handler是事件处理接口,SAX的事件处理函数就定义在这四个接口中,利用SAX解析XML文件需要重写接口中的方法。其中ContentHandler用来处理XML中的内容,ErrorHandler用来处理错误,DTDHandler用来处理DTD,EntityHandler用来处理XML文档中的实体;最常用的是ContentHandler这个接口,下面是该接口中的一些常用方法:

startDocument()

当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。

endDocument()

和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。

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

当读到一个开始标签的时候,会触发这个方法。uri是命名空间(通过xmlns声明),localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。注意,如果没有指定Namespace,则qName可能为空,当然不同的SAX实现会有所不同,比如在Android中qName为空,而J2SE中localName为空,所以想要总是得到标签名,就需要检查这两个参数的值了。

endElement(String uri, String localName, String name)

这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。

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

这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。

下面是利用SAX解析XML文件的DEMO程序,首先定义一个XML文件users.xml,内容如下:

其中第二个user标签中字符串long就是所谓的前缀,标签中的id则是该标签的一个属性。

然后我们来实现ContentHandler这个接口,并重写其中的方法来处理上面的XML文件,代码如下:

最后我们编辑TestSAX这个类,获取users.xml这个文件中的内容,并利用SAX进行解析,代码如下:


这样就算是完成了,运行之后得到以下结果:

附带贴上工程目录结构,如下图:

THE END!


分享到:
评论

相关推荐

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    [Android]使用SAX解析XML文件

    以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...

    Android之SAX解析XML

    本文将深入探讨如何在Android环境中使用SAX(Simple API for XML)解析XML文件。SAX是一种事件驱动的解析器,它在读取XML文档时触发一系列事件,开发者可以注册事件处理器来处理这些事件,从而实现对XML数据的高效、...

    android 使用sax解析XML

    本教程将详细讲解如何在Android中使用SAX解析XML。 首先,要使用SAX解析XML,我们需要理解其工作原理。SAX解析器会逐个读取XML文档的元素,每当遇到文档的开始、结束、文本等事件时,就会触发相应的回调方法。...

    android使用SAX解析XML

    总结起来,Android中使用SAX解析XML的优点在于其低内存占用和高效的性能,适合处理大型XML文档。通过创建自定义的ContentHandler并重写其方法,我们可以根据XML的结构来解析和处理数据。不过,SAX解析不适用于需要...

    android sax解析xml模板源码下载

    本示例"android sax解析xml模板源码"提供了一个使用SAX解析XML的实例,方便开发者直接导入到自己的项目中使用。 SAX解析XML的基本流程如下: 1. **创建解析器**:在Android中,我们需要使用`SAXParserFactory`来...

    android sax解析xml文件

    以下是一个简单的SAX解析XML文件的Android实例源码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...

    android sax解析xml

    本篇将详细讲解如何在Android环境中使用SAX解析XML。 1. **SAX解析的基本原理** SAX解析器读取XML文档时,遇到每个元素、属性、文本等都会触发相应的事件,开发者需要注册事件处理器来处理这些事件。这种方式适合...

    Android 创建与解析XML Sax方式

    Android中解析XML文件SAX方式 SAX解析器会触发一系列的事件,如开始文档、开始元素、结束元素等,开发者需要通过实现`DefaultHandler`或自定义的`ContentHandler`来处理这些事件。以下是一个基本的SAX解析器使用...

    Android SAX 解析XML

    下面详细介绍Android中使用SAX解析XML的关键步骤和相关知识点: 1. 引入库:在Android项目中,SAX解析器已经内置于`org.xml.sax`包中,无需额外导入库。 2. 创建事件处理器:你需要创建一个类来实现`...

    Android中SAX解析XML的demo

    Android中SAX解析XML的demo

    SAX解析xml文件源码

    下面将详细介绍SAX解析XML文件的基本原理、工作流程以及在Android环境下如何实现。 **SAX解析的基本原理:** SAX解析器在读取XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素、字符数据等...

    android SAX解析String类型 XML 字符串

    "SAX解析String类型XML字符串"就是一种高效且节省内存的方式去解析XML数据,特别是当XML文件较大时,SAX解析器优于DOM解析器,因为它不需要一次性加载整个XML到内存中。下面我们将深入探讨这一主题。 首先,XML...

    Android中使用sax解析xml文件的方法

    首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...

    Android SAX、DOM、Pull解析xml文件案例讲解

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在移动应用开发,如Android中,解析XML文件是常见的任务。本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    Android PULL SAX解析XML

    在Android项目中,通常不需要额外添加依赖,因为Android SDK已经内置了SAX解析器。 2. 创建解析器事件监听器 创建一个继承自`DefaultHandler`的类,重写其中的回调方法,例如`startElement`、`endElement`和`...

    android下解析xml文件的demo

    本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...

Global site tag (gtag.js) - Google Analytics