android學習筆記之XML解析

两种解析XML的方式

1、DOM 把文档看成一棵树,需要先把文档全部装载进去,操作简单方便,但是如果文档比较大则性能上比较有问题。

2、SAX 逐行解析,边扫描文档边解析。缺点是操作复杂,添加和删除比较麻烦

SAX ,全称是Simple API for XML,既是指一种接口,也是指一个软件包。

作为接口,SAX是事件驱动型XML解析的一个标准接口。

SAX的原理:简单地说就是对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。

大多数SAX实现都会产生以下类型的事件

{

在文档的开始和结束时触发文档处理事件。

在文档内每一XML元素接受解析的前后触发元素事件。

任何数据通常都由单独的事件交付

在处理文档的DTD或Schema时产生DTD或Schema事件

产生错误事件用来通知主机应用程序解析错误。

}

解析文档过程

对于如下文档

<doc>

<para>hello</para>

</doc>

在解析文档的过程中会产生如下一系列事件:

start document

start element:doc

start element:para

characters:hello

end element:para

end element:doc

end document

1、创建事件处理程序

2、创建SAX解析器

3、将事件处理程序分配给解析器

4、对文档进行解析,将每个事件发送给处理程序。

SAX的常用接口介绍

ContentHandler接口

ContentHandler是JAVA类包中一个特殊的SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。

ContentHandler接口的方法有以下几种:

void startDocument()

void endDocument()

void startElements(String namespaceURI,String localName, String qName, Attributes atts)

命名空间的URI 不带前缀的标签名 带前缀的标签名 标签属性

attr.getLocalName(i)得到第i+1个属性名 attr.getValue(i) 得到第i+1个属性值

void endElements(String namespaceURI,String localName, String qName)

void characters(char[] ch, int start, intlength)

String resultStr = 。。。。。。; //存放XML文件内容

创建一个SAXParserFactory

SAXParserFactory factory =SAXParserFactory.newInstance();

XMLReader reader =factory.newSAXParser().getXMLReader();

//为XMLReader设置内容处理器

reader.setContentHandler(newMyContentHandler()); MyContentHandler是一个继承了DefaultHandler的类(之所以不通过实现ContentHandler接口,是因为不需要实现接口的所有方法)

//开始解析文件

reader.parse(new InputSource(newStringReader(resultStr)));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值