android基础学习--->xml解析(二)SAX

 

 

                                                                                   

 我们使用DOM方式解析xml文档,该方式比较符合我们日常思维方式,容易上手,但是它直接把文档调入内存中,比较耗内存。在这里我们可以用另外一种方式解析xml,这个就是SAX方式。

SAX即是:Simple API for XML

SAX是基于事件驱动的。当然android的事件机制是基于回调函数的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其他节点与内容时候也会回调一个事件。

既然涉及到事件,就有事件源,事件处理器。在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口

XMLReader通过相应事件处理器注册方法setXXXX()来完成的与ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口的连接,详细介绍请见下表:

但是我们无需都继承这4个接口,SDK为我们提供了DefaultHandler类来处理,DefaultHandler类的一些主要事件回调方法如下:

由以上可知,我们需要XmlReader 以及DefaultHandler来配合解析xml。

1:创建SAXParserFactory对象

    SAXParserFactory factory = SAXParserFactory.newInstance();

2: 根据SAXParserFactory.newSAXParser()方法返回一个SAXParser解析器

    SAXParser parser = factory.newSAXParser();
3:根据SAXParser解析器获取事件源对象XMLReader
    XMLReader xmlReader = parser.getXMLReader();

4:实例化一个DefaultHandler对象
    handler = new Defaulthandler();

5:连接事件源对象XMLReader到事件处理类DefaultHandler中  

    xmlReader.setContentHandler(handler);

6:调用XMLReader的parse方法从输入源中获取到的xml数据

         xmlReader.parse(inputStream);

7:通过DefaultHandler返回我们需要的数据集合。

 

 最后总结下DefaultHandler几个回调函数

1、public void characters(char[] ch, int start, int length)   

char[] characters

解析器所发现的字符数组。

int start

属于该事件的 characters 数组中的一个字符的索引号。

int length

该事件中字符的的个数。

2、public void endElement(String uri, String localName, String qName)

结束元素

uri:名字空间的uri

localName :

一个不包括名称空间的元素名称

String qualifiedName

元素的限定名,即名称空间前缀和元素本地名称的组合。

3、public voidstartDocument()

开始解析文件

4、public void startElement(String uri, String localName, String qName, Attributes attributes)

endElement() 事件告诉您解析器发现了某个元素的结束标签。它有三个参数:

String uri String localName String qualifiedName

这三个参数和startElement一样.

对该事件的典型响应是改变 XML 应用程序中的状态信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值