资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
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,内容如下:xhtmlview plaincopy1. 2. 3. 4. 10015. ThinkingInJava6. 80.007. 8. 9. 100210. CoreJava11. 90.0012. 13. 14. 100315. Hello,Andriod16. 100.0017. 18. 然后我们分别使用以上三种解析技术解析文档,得到一个List的对象,先来看一下Book.java的代码:javaview plaincopy1. packagecom.scott.xml.model;2. 3. publicclassBook4. privateintid;5. privateStringname;6. privatefloatprice;7. 8. publicintgetId()9. returnid;10. 11. 12. publicvoidsetId(intid)13. this.id=id;14. 15. 16. publicStringgetName()17. returnname;18. 19. 20. publicvoidsetName(Stringname)21. this.name=name;22. 23. 24. publicfloatgetPrice()25. returnprice;26. 27. 28. publicvoidsetPrice(floatprice)29. this.price=price;30. 31. 32. Override33. publicStringtoString()34. returnid:+id+,name:+name+,price:+price;35. 36. 最后,我们还要把这个集合对象中的数据生成一个新的XML文档,如图:生成的XML结构跟原始文档略有不同,是下面这种格式:xhtmlview plaincopy1. 2. 3. 4. ThinkingInJava5. 80.06. 7. 8. CoreJava9. 90.010. 11. 12. Hello,Andriod13. 100.014. 15. 接下来,就该介绍操作过程了,我们先为解析器定义一个BookParser接口,每种类型的解析器需要实现此接口。BookParser.java代码如下:javaview plaincopy1. packagecom.scott.xml.parser;2. 3. importjava.io.InputStream;4. importjava.util.List;5. 6. importcom.scott.xml.model.Book;7. 8. publicinterfaceBookParser9. /*10. *解析输入流得到Book对象集合11. *paramis12. *return13. *throwsException14. */15. publicListparse(InputStreamis)throwsException;16. 17. /*18. *序列化Book对象集合得到XML形式的字符串19. *parambooks20. *return21. *throwsException22. */23. publicStringserialize(Listbooks)throwsException;24. 好了,我们就该一个一个的实现该接口,完成我们的解析过程。使用SAX解析器:SaxBookParser.java代码如下:c-sharpview plaincopy1. packagecom.scott.xml.parser;2. 3. importjava.io.InputStream;4. importjava.io.StringWriter;5. importjava.util.ArrayList;6. importjava.util.List;7. 8. importjavax.xml.parsers.SAXParser;9. importjavax.xml.parsers.SAXParserFactory;10. importjavax.xml.transform.OutputKeys;11. importjavax.xml.transform.Result;12. importjavax.xml.transform.Transformer;13. importjavax.xml.transform.TransformerFactory;14. importjavax.xml.transform.sax.SAXTransformerFactory;15. importjavax.xml.transform.sax.TransformerHandler;16. importjavax.xml.transform.stream.StreamResult;17. 18. importorg.xml.sax.Attributes;19. importorg.xml.sax.SAXException;20. importorg.xml.sax.helpers.AttributesImpl;21. importorg.xml.sax.helpers.DefaultHandler;22. 23. importcom.scott.xml.model.Book;24. 25. publicclassSaxBookParserimplementsBookParser26. 27. Override28. publicListparse(InputStreamis)throwsException29. SAXParserFactoryfactory=SAXParserFactory.newInstance();/取得SAXParserFactory实例30. SAXParserparser=factory.newSAXParser();/从factory获取SAXParser实例31. MyHandlerhandler=newMyHandler();/实例化自定义Handler32. parser.parse
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号