初识Android之xml解析

原创 2012年03月24日 14:03:54

Android 作为一个开源移动开发平台,为用户提供了众多丰富有趣的功能,XML作为Internet 上的一种数据格式为其实现提供了一些特殊的支持。今天花了一些时间学习了下xml的解析,现在总结如下:

读取XML主要有2种方法:DOM和SAX,DOM(文档对象模型),为XML文档的解析定义了一组接口,解析器读入整个文档,构造一个驻留内存的树结构,然后代码就可以使用DOM接口来操组整个树结构,其优点是:整个文档树都在内存当中,便于操作;支持删除、修改、重新排列等多功能。缺点是:将整个文档调入内存(经常包含大量无用的节点),浪费时间和空间。这种方式的使用场合是:一旦解析了文档还需要多次访问这些数据,而且资源比较充足(如内存、CPU等)的情况。

为了解决DOM解析XML引起的这些问题,出现了SAX。SAX全称Simple API for XML,即指一种接口,也是指一个软件包。作为接口,SAX是事件驱动型XML解析的一个标准接口。SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(documnet)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续做同样的扫描,直到文档结束。大多数SAX实现都会产生以下类型的事件:
    在文档的开始和结束时触发文档处理事件。
    在文档内每一XML元素接受解析的前后触发元素事件。
    任何元数据通常都由单独的事件交互。
    在处理文档的DTD或Schema时产生DTD或Schema事件。
    产生错误事件用来通知主机应用程序解析错误。

在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来开始解析XML文档,并根据文档的内容产生事件。而事件处理器则是org.xml.sax包中的ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口,它们分别处理事件源在解析XML文档过程中产生的不同种类的事件。而事件源XMLReader与这4个事件处理器的连接是通过在XMLReader中的相应事件处理器注册方法setXXXX()来完成的。

ContentHandler是Java类包中一个特殊的SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,其会遇到某些特殊的事件,比如文档的开头和结束,元素开头和结束,以及元素中的字符数据等事件。当遇到这些事件时,xml解析器会调用ContentHandler接口中相应的方法来响应该事件。主要方法有:void characters(char[] ch, int start, int length) ;void startDocument()
void startElement(String uri, String localName, String qName, Attributes atts)
void endDocument() ;void endElement(String uri, String localName, String qName) 。

ErrorHandler处理文档中产生的错误。主要方法有:void error(SAXParseException exception) ;
void fatalError(SAXParseException exception) ;void warning(SAXParseException exception) 。

DTDHandler处理对文档的DTD(Document Type Definition是一套关于标记符的语法规则)进行解析时产生的相应事件。主要方法有:void notationDecl(String name, String publicId, String systemId) ;
void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) 。
    EntityResolver处理外部实体。主要方法有:abstract InputSource resolveEntity(String publicId, String systemId) 。

SAX的主要优点是:不用事先调入整个文档,占用资源少。尤其在嵌入式环境中,极力推荐采用SAX进行解析XML文档。主要缺点是:不像DOM一样将文档长期驻留在内存,数据不是持久的,事件过后,如没有保存数据,那么数据就会丢失。使用场合:机器性能有限,尤其是在嵌入式环境,如Android,极力推荐采用SAX进行解析XML文档。
    由于使用DOM方法需要将整个XML文档加载内存中,对系统资源占用比较多,这对内存比较紧张的Android系统来说,使用DOM方法读取XML文档会有很大的限制。通常使用SAX方法来读取XML,这样对内存资源的占用相对比较少,因此在嵌入式设备中极力推荐使用,Android也不例外。

相关文章推荐

android初识属性动画---alpha、scale、translate、rotate、set的xml属性及用法

这是我写给自己平时用的,可能会不全 1.简介 Android的animation由四种类型组成:alpha、scale、translate、rotate,alpha 渐变透明度动画效果 sca...

【maven初识——Settings.xml解析】

前言:    来到公司,接触了真正的Java项目,之前实践的都是小例子,正如其他一样,必不可少的是配置他所需要的各种环境,咱们今天要讲的内容是maven的Settings.xml文件的事儿,如果读者...

Android基础-初识SQLite(源代码)

  • 2017年01月29日 18:10
  • 25.2MB
  • 下载

初识Android--开发环境图文详解PPT

  • 2011年08月09日 14:07
  • 454KB
  • 下载

Android Volley完全解析(一),初识Volley的基本用法

原文链接http://www.kwstu.com/ArticleView/kwstu_20144118313429

初识Android

  • 2014年10月19日 11:28
  • 5.42MB
  • 下载

Android初识之Activity组件

  • 2014年05月13日 20:28
  • 1.44MB
  • 下载

Android Volley完全解析(一),初识Volley的基本用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482095 1. Volley简介 我们平时在开发Android应用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初识Android之xml解析
举报原因:
原因补充:

(最多只允许输入30个字)