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; }}

    推荐阅读