- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android中解析XML方法详解
XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。
在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。
SAX解析器:
SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为。
SAX解析器的优点是解析速度快,占用内存少。非常适合在Android移动设备中使用。
DOM解析器:
DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。
由于DOM在内存中以树形结构存放,因此检索和更新效率会更高。但是对于特别大的文档,解析和加载整个文档将会很耗资源。
PULL解析器:
PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器。
以上三种解析器,都是非常实用的解析器,我将会一一介绍。我们将会使用这三种解析技术完成一项共同的任务。
我们新建一个项目,项目结构如下:
我会在项目的assets目录中放置一个XML文档books.xml,内容如下:
[xhtml]?view plaincopy
?xml?version=1.0?encoding=utf-8???
books??
????book??
????????id1001/id??
????????nameThinking?In?Java/name??
????????price80.00/price??
????/book??
????book??
????????id1002/id??
????????nameCore?Java/name??
????????price90.00/price??
????/book??
????book??
????????id1003/id??
????????nameHello,?Andriod/name??
????????price100.00/price??
????/book??
/books??
然后我们分别使用以上三种解析技术解析文档,得到一个ListBook的对象,先来看一下Book.java的代码:
[java]?view plaincopy
package?com.scott.xml.model;??
??
public?class?Book?{??
????private?int?id;??
????private?String?name;??
????private?float?price;??
??????
????public?int?getId()?{??
????????return?id;??
????}??
??
????public?void?setId(int?id)?{??
????????this.id?=?id;??
????}??
??
????public?String?getName()?{??
????????return?name;??
????}??
??
????public?void?setName(String?name)?{??
?????????=?name;??
????}??
??
????public?float?getPrice()?{??
????????return?price;??
????}??
??
????public?void?setPrice(float?price)?{??
????????this.price?=?price;??
????}??
??
????@Override??
????public?String?toString()?{??
????????return?id:?+?id?+?,?name:?+?name?+?,?price:?+?price;??
????}??
}??
最后,我们还要把这个集合对象中
文档评论(0)