Android中的XML解析

上传人:夏** 文档编号:491163229 上传时间:2023-07-29 格式:DOC 页数:10 大小:73.50KB
返回 下载 相关 举报
Android中的XML解析_第1页
第1页 / 共10页
Android中的XML解析_第2页
第2页 / 共10页
Android中的XML解析_第3页
第3页 / 共10页
Android中的XML解析_第4页
第4页 / 共10页
Android中的XML解析_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《Android中的XML解析》由会员分享,可在线阅读,更多相关《Android中的XML解析(10页珍藏版)》请在金锄头文库上搜索。

1、在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。 下面是本例子要解析的XML文件: 文件名称:itcast.xml 李明 30 李向梅 25 例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码: public class Person private Integer id; private String name; private Short age; public Integer getId() re

2、turn id; public void setId(Integer id) this.id = id; public String getName() return name; public void setName(String name) this.name = name; public Short getAge() return age; public void setAge(Short age) this.age = age; 使用SAX读取XML文件 SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也

3、就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。 下面是一些ContentHandler接口常用的方法: startDocument() 当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。 endDocument() 和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。 startElement(String namespaceURI, String

4、 localName, String qName, Attributes atts) 当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这

5、使得SAX在编程处理上没有DOM来得那么方便。 endElement(String uri, String localName, String name) 这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。 characters(char ch, int start, int length) 这个方法用来处理在XML文件中读到的内容,第一个参数用于存放文件的内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。解析itcast.xml触发的事件为: 读到的标签及内容 触发事件 文档开始 startD

6、ocument() startElement(, persons, null, Attributes) nt characters(., 12, 2) startElement(, person, null, Attributes) ntt characters(., 31, 3) startElement(, name, null, Attributes) 李明 characters(., 40, 2) endElement(, name, null) ntt characters(., 50, 3) startElement(, age, null, Attributes) 30 char

7、acters(., 58, 2) endElement(, age, null) nt characters(., 67, 2) endElement(, person, null) nt characters(., 79, 2) startElement(, person, null, Attributes) ntt characters(., 98, 3) startElement(, name, null, Attributes) 李向梅 characters(., 107, 3) endElement(, name, null) ntt characters(., 118, 3) st

8、artElement(, age, null, Attributes) 25 characters(., 126, 2) endElement(, age, null) nt characters(., 135, 2) endElement(, person, null) n characters(., 147, 1) endElement(, persons, null) 文档结束 endDocument() 只要为SAX提供实现ContentHandler接口的类,那么该类就可以得到通知事件(实际上就是SAX调用了该类中的回调方法)。因为ContentHandler是一个接口,在使用的时候

9、可能会有些不方便,因此,SAX还为其制定了一个Helper类:DefaultHandler,它实现了这个接口,但是其所有的方法体都为空,在实现的时候,你只需要继承这个类,然后重载相应的方法即可。使用SAX解析itcast.xml的代码如下: public static List readXML(InputStream inStream) try SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser saxParser = spf.newSAXParser(); /创建解析器 /设置解析器的相关特性,http:/xml.

10、org/sax/features/namespaces = true 表示开启命名空间特性 saxParser.setProperty(http:/xml.org/sax/features/namespaces,true); XMLContentHandler handler = new XMLContentHandler(); saxParser.parse(inStream, handler); inStream.close(); return handler.getPersons(); catch (Exception e) e.printStackTrace(); return nul

11、l; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import cn.itcast.xml.domain.Person; public class XMLContentHandler extends DefaultHandler private List persons = null; private Person currentPerson; private String tagName = null;/当前解析的元素标签 public List getPersons() return persons; /* * 接收文档的开始的通知。 */ Override public void startDocument() throws SAXException persons = new ArrayList(); /* * 接收字符数据的通知。 */ Override publi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号