`
mixer_a
  • 浏览: 369235 次
社区版块
存档分类
最新评论

Android进阶2之SAX方法解析XML

 
阅读更多

<一>简介

什么是SAX呢?以前只是听说SAX,SAX的,但从未接触,今天学习一下,顺便做一下笔记。

SAX是Simple API for XML的缩写,它既是一个接口也是一个包。

SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 这个不同于DOM解析,DOM是把全部数据放入内存进行解析。

SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档。在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调方法,这些方法定义在ContentHandler接口中。

另外一点就是:SAX在解析件的过程中得到自己需要的信息后可以随时终止解析,并不一定要等文件全部解析完毕。

有优势必定优劣势:SAX采用的是流式处理方式,当遇到某个标签的时候,它并不会记录下以前所遇到的标签,也就是说,在处理某个标签的时候,比如在startElement方法中,所能够得到的信息就是标签的名字和属性,至于标签内部的嵌套结构,上层标签、下层标签以及其兄弟节点的名称等等与其结构相关的信息都是不得而知的。实际上就是把XML文件的结构信息丢掉了,如果需要得到这些信息的话,只能你自己在程序里进行处理了。所以相对DOM而言,SAX处理XML文档没有DOM方便,SAX处理的过程相对DOM而言也比较复杂。

<二>ContentHandler接口常用的方法

startDocument()  

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

     和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。 
startElement(String namespaceURI, String localName, String qName, Attributes atts)    

     当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签        名。通过atts可以得到所有的属性名和相应的值。要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰      到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属      等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得SAX在编程处理上没有DOM来得那么方便。
endElement(String uri, String localName, String name)   

    这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。
characters(char[] ch, int start, int length)    

    这个方法用来处理在XML文件中读到的内容。例如:<name>xiaosi</name> 主要目的是获取name标签中的值。

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

<?xml version="1.0"?> ---------->startDocument()

<student>             ---------->startElement

   <name>             ---------->startElement

   xiasoi             ---------->characters

   </name>            ---------->endElement

   <id>               ---------->startElement

   090105             ---------->characters

   </id>              ---------->endElement

</student>            --------->endElement

文档结束               --------->startDocument()


<三>解析步骤

使用SAX解析XML文件一般有以下五个步骤:
1、创建一个SAXParserFactory对象(通过类名很容易得知它利用工厂方法模式实现的);
2、调用SAXParserFactory中的newSAXParser方法创建一个SAXParser对象;
3、然后在调用SAXParser中的getXMLReader方法获取一个XMLReader对象;
4、在XMLReader中注册事件处理接口,一般有ContentHandler、ErrorHandler、DTDHandler、EntityHandler四种;
5、调用XMLReader中的parse方法解析指定的XML字符串对象;

具体实现:

注意:因为ContentHandler是一个接口,在使用的时候有些不方便,需要全部实现所有的方法,但是有些方法我们会用不到。因此,SAX还为其制定了一个Helper类:DefaultHandler,它实现了这个接口,但是其所有的方法体都为空,在实现的时候,你只需要继承这个类,然后重载相应的方法即可



MyContentHandler:




分享到:
评论

相关推荐

    Android高级应用源码-Android解析服务端XML.rar

    这个压缩包“Android高级应用源码-Android解析服务端XML.rar”显然是一个包含示例代码的资源,旨在教授如何在Android应用程序中解析XML数据。下面将详细介绍XML解析在Android中的应用和相关知识点。 1. XML简介: ...

    XML学习进阶 XML学习入门资料

    2. SAX解析:事件驱动模型,只读、逐行处理XML,适用于大文件。例如,处理开始元素的回调函数: ```python def start_element(name, attrs): print(f'Started processing {name} with attributes {attrs}') ``` 3. ...

    Android开发教程之使用_Android_和_XML_构建动态用户界面(一).

    - **SAX**:XML的简单API,一种用于解析XML文档的事件驱动型API。 - **SDK**:软件开发工具包,包含了用于开发软件应用程序的一系列工具和文档。 - **UI**:用户界面,人与机器交互的主要方式。 - **URL**:统一资源...

    xml初学进阶xml初学进阶xml初学进阶xml初学进阶

    2. SAX解析器:事件驱动的解析方式,逐行读取,占用资源较少,适用于大文件处理。 六、XPath和XSLT 1. XPath:用于在XML文档中查找信息的语言,可以根据路径表达式选取节点。 2. XSLT:转换XML文档的语言,将源XML...

    老罗android开发视频教程全集百度网盘下载

    Android进阶初级:组件Widget/ 菜单Menu/ 布局Layout 详解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL数据库原理, SQLit e /SharedPreferences/File详解 多媒体Audio/Video/Camera 详解 Android进阶高级:蓝牙/WIFI SMS/...

    安卓用xml文件实现天气解析

    (2)XML序列化和解析:在Android中,解析XML文件最常用的方法是使用SAX(Simple API for XML)和DOM(Document Object Model)解析器。SAX解析器适用于处理大文件,因为它按事件驱动,只在遇到特定元素时触发回调,...

    MyXmlParser.rar

    Android进阶之XML数据解析源码 本节我们学习XML解析,在Android程序中,Xml解析与Java中几乎相同,最常用的有SAX,DOM,Pull三种解析方式。Android中内置的是Pull解析方式,因此Pull解析也就成为Android推荐的解析...

    android笔试题及答案.pdf

    9. SAX解析XML文件:SAX解析器是一种基于事件驱动的解析方式,它不需要将整个XML文档加载到内存,从而节省资源,适用于处理大型XML文件。而DOM解析器会将整个XML文档加载到内存,便于进行各种操作,但消耗较大内存。...

    Android应用开发揭秘(pdf )

    解析XML数据是Android应用中常见的任务,Android提供了多种解析XML的方式,如DOM、SAX和XML Pull解析器。开发者可以根据应用需求和数据量大小选择合适的解析方式,以提高解析速度并减少对内存和CPU资源的消耗。 ...

    android RSS阅读器

    1. XML解析:在Android中,我们通常使用DOM或SAX解析器来处理XML数据。DOM解析器将整个XML文档加载到内存中,方便查找和修改元素,但对大文件处理可能消耗较多资源。SAX解析器则采用事件驱动的方式,逐行读取XML,...

    Android 学习笔记

    XML解析在Android中用于读取和解析XML文件。SAX(Simple API for XML)是基于事件的解析器,占用资源少,适用于大文件。PULL解析器是Android提供的轻量级XML解析库,适用于流式处理XML数据。 10. **文件存取、...

    xml教程

    XML教程通常会涵盖这些基础,以及进阶的XML处理技术,如DOM(Document Object Model)解析、SAX(Simple API for XML)事件驱动解析和Pull解析。掌握XML不仅有助于你理解Web开发的底层逻辑,还能提升你在数据处理和...

    android源码3

    学习这部分可能包括如何读取、解析XML文件,并将数据绑定到UI上。 4. **Web服务调用**: Android应用经常需要与服务器进行数据交互,这就涉及到了HTTP协议和Web服务调用。可能包含的知识点有使用HttpURLConnection、...

    Android面试题整理

    5. **XML解析方式:DOM、SAX、Pull** - **DOM**:一次性加载整个XML文档,形成树形结构,适合小型文档,大型文档可能导致内存问题。 - **SAX**:事件驱动解析,只在需要时读取数据,节省内存,适用于大文档和实时...

    Manual for Developers Android

    - Android中对XML文件的处理涉及SAX、DOM、XmlPull等解析技术,以及自定义的读写方法。 15. 数据库操作 - SQLite是Android内置的轻量级关系数据库,应用可以通过SQLite数据库执行数据的插入、更新、删除和查询...

    Android学习教材

    数据解析是处理网络数据的关键,本章详细讲述了XML和JSON解析技术,包括使用DOM、SAX和Pull解析器的方式。读者将能高效地解析和构建数据结构。 第12章:Android开发相关技术 这一章可能涉及到了Android开发的其他...

    中关村黑马程序员训练营android-4.0视频下载地址

    - **内容介绍**:讲解了如何在Android应用中解析XML文件,包括使用DOM、SAX等不同的解析方式。 #### 30. Pull解析XML - **视频链接**:http://www.400gb.com/file/85688595 - **内容介绍**:介绍了Pull解析方式的...

    android学习档案

    - **XML解析**:SAX、DOM、Pull三种常见解析方式的原理和使用场景。 - **Handler机制**:用于处理线程间通信的Handler模式,实现异步任务处理。 - **多媒体应用**:MediaPlayer的使用,实现音频视频播放功能。 - **...

Global site tag (gtag.js) - Google Analytics