初识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也不例外。

安卓开发中,与后台服务器对接之XML解析

XML解析分三种方式使用DOM解析XML数据基础知识 (1)Node,每一对都代表一个节点; (2)NodeList,拥有多个Node的Node; (3)Element,每一个节点是一个Elem...
  • qq_28695619
  • qq_28695619
  • 2017年07月18日 23:42
  • 303

集成算法系列之GBM

http://baijiahao.baidu.com/s?id=1570175598042474&wfr=spider&for=pc 一、GBM简介 GBM全称为Gradient Boosti...
  • zhaoyuxia517
  • zhaoyuxia517
  • 2017年12月07日 10:20
  • 216

Android之Http通信——1.初识Http协议

Android之Http通信——1.初识Http协议 本文内容: >1. 介绍了下HTTP协议的一些概念、 >2. 简单的说了下HTTP 1.0 和HTTP 1.1的区别 >3. HTTP请求的流程,...
  • zpj779878443
  • zpj779878443
  • 2015年06月02日 17:16
  • 7440

android三种XMl解析

android一共提供了三种XMl解析的方式,分别为:SAX解析,Pull解析,DOM解析。 第一种:SAX解析:  SAX是驱动型的xml解析,对文档进行顺序扫描,当扫描到documen...
  • u013209460
  • u013209460
  • 2016年12月07日 20:44
  • 625

Android基础——XML数据的三种解析方式

Android基础——XML数据的三种解析方式 本篇文章包含以下内容: XML数据的Dom解析 XML数据的Sax解析 XML数据的Pull解析 Activity中使用...
  • qq_30379689
  • qq_30379689
  • 2016年11月15日 13:36
  • 6893

Android几种解析XML方式的比较

XML介绍:Extensible Markup Language,即可扩展标记语言 一、使用SAX解析XMLSAX(Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关...
  • isee361820238
  • isee361820238
  • 2016年08月30日 17:32
  • 7844

Android解析XML的三种方式

在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式. 如图: ...
  • d_shadow
  • d_shadow
  • 2017年02月16日 11:28
  • 1185

android xml解析库选择

安卓常用的xml解析主要就是SAX(Simple API for XML)、DOM和Poll xmlpoll。 使用方法可以参考: http://www.cnblogs.com/devinzhan...
  • xiaoyur347
  • xiaoyur347
  • 2017年03月14日 21:11
  • 488

Android自己动手打造XML解析框架

我们在工作中,经常会从服务器获取数据并进行解析,服务器返回的数据有两种:json和xml。json我们可以用gson或者fastjson等优秀的开源框架去进行解析,省去不少麻烦,通常我们只需要把bea...
  • nugongahou110
  • nugongahou110
  • 2015年07月20日 09:11
  • 10317

安卓xml使用第三方框架Xstream解析

//首先实例化Xstream XStream stream = new XStream();         stream.processAnnotations(MyBean.class);/...
  • qq_33983391
  • qq_33983391
  • 2016年06月01日 16:35
  • 4438
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初识Android之xml解析
举报原因:
原因补充:

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