您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > Android8-XML解析与JSON解析
第8章AndroidXML与JSON解析内容概要XML简介;AndroidXML解析的方式;JSON简介;AndroidJSON解析的方式。XML简介Java为编程提供了一种平台无关的程序设计语言,从而导致了一场编程的革命。而XML为数据交换提供了一种平台无关的语言,使得这场革命更进一步。正如Java带来了一种完全可移植的编程语言,XML带来一种完全可移植的数据格式。实际上正是因为有了XML,Java创造者们的宏伟目标才得以实现。与平台无关的语言Java加上与平台无关的数据XML,确实能够完成最为复杂且弹性最好的分布式应用。XML简介XML全称是“可扩展标记语言”(ExtensibleMarkupLanguage)。它是互联网联合组织(W3C)创建的一组规范,以便于软件开发人员和内容创作者在网页上组织信息,其目的不仅在于满足不断增长的网络应用需求,同时还希望借此能够确保在通过网络进行交互合作时,具有良好的可靠性和与交互性。XML区别于HTML的最大特点就是XML是可扩展的,即它允许用户自己定义标记,这也是它被称为可扩展标记语言的原因。XML简介XML既不是对HTML的改进,也不是HTML的替代品,它是一种完全面向数据语义的标记语言,取消了HTML的显示样式与布局描述能力,突出了数据的语义与元素结构描述能力。XML特点可归纳为:(1)XML是元语言。元语言是描述其它语言的语言,本身可以创建一种语言,可以用来创建自己的标记。(2)允许通过使用自定义格式,标识、交换和处理数据库可以理解的数据。XML简介(3)基于文本的格式,允许开发人员描述结构化数据并在各种应用程序之间发送和交换这些数据。(4)有助于在服务器之间传输结构化数据。XML的应用可分为四类(1)数据交换。数据可能来自不同的数据库,都有各自不同的复杂格式,但客户与这些数据库间只通过一种标准语言进行交互,由于XML的自定义性及可扩展性,它足以表达各种类型的数据。XML简介(2)Web服务。Web服务是服务是令人激动的革命之一,它能让使用不同系统和不同编程语言的人们能够相互交流和分享数据,其基础在于Web服务器用XML在系统之间交换数据。(3)内容管理。XML用元素和属性来描述数据,而不提供数据的显示方法。这样XML就提供了优秀的方法来标记独立于平台和语言的内容。(4)Web集成。可以直接处理XML数据,而无需向服务器请求,因此可满足网络代理对获得的信息进行编辑、增减以适应个人用户的需要,如有些客户取得数据并不是为了直接使用而是为了根据需要组织自己的数据库。XML简介XML和HTMLHTML本身存在很多的缺点,例如,内容和页面的排版、表现形式混在一起,过度的膨胀。数据库存储的信息,经过CGI,ASP等的解释和转换为HTML格式后,信息原有的格式已面目全非。电子商务的逐渐流行,HTML本身的种种缺点却阻碍了它的发展。这时候就是我们的XML出场的最佳时刻。XML最厉害的地方就是将数据和表达形式完全分离。XML就是一种树状结构。XML简介XML的重点在内容上,而HTML的重点在页面的布局和排版上。XML的优势:1)方便不同系统之间的信息交流;2)更方便的信息搜索。文件的内容和外观设计是完全分开的,外观变动时,XML文件本身不受影响。对信息进行搜索时,只要对XML文件进行搜索,就可以得到自己想要的有用信息。XML简介XML文件格式如下:?xmlversion=1.0encoding=GBK?学生编号001/编号姓名张三/姓名性别男/性别年龄21/年龄/学生XML简介1)?xml...?的作用是告诉浏览器或其他应用程序这个文档是XML文档。2)注意区分大小写。3)“有始有终”,所有的标识必须有相应的结束标示符。4)空标识必须被关闭。5)给属性值加引号。6)标识之间不可以交叉。AndroidXML解析的方式XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。在Android中,常见的XML解析器分别为DOM解析器、SAX解析器和PULL解析器。DOM解析DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOMAPI遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点。AndroidXML解析的方式信息。Android完全支持DOM解析。利用DOM中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等操作。DOM的工作原理:使用DOM对XML文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档—这就是DOM的工作原理。AndroidXML解析的方式DOM实现时首先为XML文档的解析定义一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,这样代码就可以使用DOM接口来操作整个树结构。由于DOM在内存中以树形结构存放,因此检索和更新效率会更高。但是对于特别大的文档,解析和加载整个文档将会很耗资源。当然,如果XML文件的内容比较小,采用DOM是可行的。AndroidXML解析的方式常用的DOM接口和类:Document:该接口定义分析并创建DOM文档的一系列方法,它是文档树的根,是操作DOM的基础。Element:该接口继承Node接口,提供了获取、修改XML元素名字和属性的方法。Node:该接口提供处理并获取节点和子节点值的方法。NodeList:提供获得节点个数和当前节点的方法。这样就可以迭代地访问各个节点。AndroidXML解析的方式DOMParser:该类是Apache的Xerces中的DOM解析器类,可直接解析XML文件。AndroidXML解析的方式DOM解析方式的步骤如下DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdocument=builder.parse(inStream);Elementroot=document.getDocumentElement();//对root进行循环操作AndroidXML解析的方式SAX解析SAX(SimpleAPIforXML)解析器是一种基于事件的解析器,事件驱动的流式解析方式是,从文件的开始顺序解析到文档的结束,不可暂停或倒退。它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为。AndroidXML解析的方式SAX解析器的优点是解析速度快,占用内存少。非常适合在Android移动设备中使用。SAX的工作原理:SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。AndroidXML解析的方式在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口。XMLReader通过相应事件处理器注册方法setXXXX()来完成的与ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口的连接。常用的SAX接口和类:Attrbutes:用于得到属性的个数、名字和值。ContentHandler:定义与文档本身关联的事件(例如,开始和结束标记)。大多数应用程序都注册这些事件。AndroidXML解析的方式DTDHandler:定义与DTD关联的事件。它没有定义足够的事件来完整地报告DTD。EntityResolver:定义与装入实体关联的事件。只有少数几个应用程序注册这些事件。ErrorHandler:定义错误事件。许多应用程序注册这些事件以便用它们自己的方式报错。DefaultHandler:它提供了这些接口的缺省实现。在大多数情况下,为应用程序扩展DefaultHandler并覆盖相关的方法要比直接实现一个接口更容易。AndroidXML解析的方式AndroidXML解析的方式AndroidXML解析的方式SAX解析的关键代码如下SAXParserFactoryfactory=SAXParserFactory.newInstance();SAXParserparser=factory.newSAXParser();PersonHandlerhandler=newPersonHandler();parser.parse(inStream,handler);inStream.close();AndroidXML解析的方式privatefinalclassPersonHandlerextendsDefaultHandler{privateListPersonpersons=null;privatePersonperson=null;privateStringtag=null;//当前解析的元素标签publicListPersongetPersons(){returnpersons;}publicvoidstartDocument()throwsSAXException{persons=newArrayListPerson();}AndroidXML解析的方式publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{if(person.equals(localName)){person=newPerson();person.setId(newInteger(attributes.getValue(0)));}tag=localName;}AndroidXML解析的方式publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{if(tag!=null){Stringtextdata=newString(ch,start,length);if(name.equals(tag)){person.setName(textdata);}elseif(age.equals(tag)){person.setAge(newShort(textdata));}}}AndroidXML解析的方式publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{if(person.equals(localName)){persons.add(person);person=null;}tag=null;}}}AndroidXML解析的方式PULL解析Android并未提供对JavaSAXAPI的支持。但是,Android附带了一个pull解析器,其工作方式类似于SAX。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析器自动将事件推入处理程序相反。PULL解析器的运行方式和S
本文标题:Android8-XML解析与JSON解析
链接地址:https://www.777doc.com/doc-4765770 .html