资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Android中解析XML 分类: Android 2011-05-12 19:32 112647人阅读 评论(81) 收藏举报androidbooksexceptionstringattributesxmlXML在各种开发中都广泛应用,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 plaincopyprint?1001ThinkingInJava80.001002CoreJava90.001003Hello,Andriod100.00然后我们分别使用以上三种解析技术解析文档,得到一个List的对象,先来看一下Book.java的代码:java view plaincopyprint?package.scott.xml.model;publicclassBookprivateintid;privateStringname;privatefloatprice;publicintgetId()returnid;publicvoidsetId(intid)this.id=id;publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;publicfloatgetPrice()returnprice;publicvoidsetPrice(floatprice)this.price=price;OverridepublicStringtoString()returnid:+id+,name:+name+,price:+price;最后,我们还要把这个集合对象中的数据生成一个新的XML文档,如图:生成的XML结构跟原始文档略有不同,是下面这种格式:xhtml view plaincopyprint?ThinkingInJava80.0CoreJava90.0Hello,Andriod100.0接下来,就该介绍操作过程了,我们先为解析器定义一个BookParser接口,每种类型的解析器需要实现此接口。BookParser.java代码如下:java view plaincopyprint?package.scott.xml.parser;importjava.io.InputStream;importjava.util.List;import.scott.xml.model.Book;publicinterfaceBookParser/*解析输入流得到Book对象集合*paramis*return*throwsException*/publicListparse(InputStreamis)throwsException;/*序列化Book对象集合得到XML形式的字符串*parambooks*return*throwsException*/publicStringserialize(Listbooks)throwsException;好了,我们就该一个一个的实现该接口,完成我们的解析过程。使用SAX解析器:SaxBookParser.java代码如下:c-sharp view plaincopyprint?package.scott.xml.parser;importjava.io.InputStream;importjava.io.StringWriter;importjava.util.ArrayList;importjava.util.List;importjavax.xml.parsers.SAXParser;importjavax.xml.parsers.SAXParserFactory;importjavax.xml.transform.OutputKeys;importjavax.xml.transform.Result;importjavax.xml.transform.Transformer;importjavax.xml.transform.TransformerFactory;importjavax.xml.transform.sax.SAXTransformerFactory;importjavax.xml.transform.sax.TransformerHandler;importjavax.xml.transform.stream.StreamResult;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.AttributesImpl;importorg.xml.sax.helpers.DefaultHandler;import.scott.xml.model.Book;publicclassSaxBookParserimplementsBookParserOverridepublicListparse(InputStreamis)throwsExceptionSAXParserFactoryfactory=SAXParserFactory.newInstance();/取得SAXParserFactory实例 SAXParserparser=factory.newSAXParser();/从factory获取SAXParser实例 MyHandlerhandler=newMyHandler();/实例化自定义Handler parser.parse(is,handler);/根据自定义Handler规如此解析输入流 returnhandler.getBooks();OverridepublicStringserialize(Listbooks)throwsExceptionSAXTransformerFactoryfactory=(SAXTransformerFactory)TransformerFactory.newInstance();/取得SAXTransformerFact
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号