android 通用xml解析,Android xml解析

xml解析有三种方式

dom解析,sax解析,pull解析

1-dom

DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大

2-SAX

SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。SAX解析器的工作方式是自动将事件推入事件处理器进行处理,因此你不能控制事件的处理主动结束;

3-pull

Pull解析器是一个开源的Java项目,Android系统内部解析XML文件均为此种方式,也可用于JavaEE项目,Android SDK中已经集成了Pull解析器,无需添加任何jar文件。Android系统中推荐使用Pull

SAX和PULL区别

SAX解析器

工作方式是自动将事件推入事件处理器进行处理,因此你不能控制事件的处理主动结束;

Pull解析器

工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。

pull是一个while循环,随时可以跳出,而sax不是,sax是只要解析了,就必须解析完成。

pull解析

public class XmlParserUtils {

public static List parserXml(InputStream inputStream)

throws Exception {

// [0]创建集合 把书的信息封装到集合

List lists = null;

Book book = null;

// [1]通过Xml工具类来获取xml解析器

XmlPullParser parser = Xml.newPullParser();

// [3]获取解析器后 告诉解析器具体要解析哪个xml文档

parser.setInput(inputStream, "utf-8");

// [4]通过解析器获取xml解析事件类型

int eventType = parser.getEventType();

// [5]使用循环 把我们关心的数据解析出来 这块逻辑最好不 要写1 因为阅读型不好

while (eventType != XmlPullParser.END_DOCUMENT) {

// [6]具体判断一下到底是开始标签 还是结束标签

switch (eventType) {

case XmlPullParser.START_TAG: // 代表解析到的是开始标签

// [6.1]具体判断一下到底解析的是哪个开始标签

if ("bookstore".equals(parser.getName())) {

// [6.2]创建集合对象用来存每本书的信息

lists = new ArrayList();

} else if ("book".equals(parser.getName())) {

// [6.3]当解析到book标签的时候创建book对象

book = new Book();

} else if ("name".equals(parser.getName())) {

// [6.4]获取书名 把书名存到book对象里

String name = parser.nextText();

book.setName(name);

} else if ("price".equals(parser.getName())) {

// [6.4]获取书名 把书名存到book对象里

String price = parser.nextText();

book.setPrice(price);

}

break;

case XmlPullParser.END_TAG: // 代表解析的是结束标签

if ("book".equals(parser.getName())) {

// 把book对象(javabean) 加入到集合中

lists.add(book);

}

break;

}

// [7]不到文档结尾 就一直解析

eventType = parser.next();

}

return lists;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值