Android|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区别
【Android|Android xml解析】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;
}}
推荐阅读
- android第三方框架(五)ButterKnife
- mybatisplus如何在xml的连表查询中使用queryWrapper
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)