dom解析:基于全文加载的解析方式   sax解析:基于事件的逐行解析方式  pull解析:同sax

        



    XmlPullParser


    //解析xml文件读取短信内容

    public static int restoreSms(Context context) {

        ArrayList<SmsBean> arrayList = null;

        SmsBean smsBean = null;

        try{

            //1.通过Xml获取一个XmlPullParser对象

            XmlPullParser xpp = Xml.newPullParser();

            //2.设置XmlPullParser对象的参数,需要解析的是哪个xml文件,设置一个文件读取流

        

            //通过context获取一个资产管理者对象

            AssetManager assets = context.getAssets();

            //通过资产管理者对象能获取一个文件读取流

            InputStream inputStream = assets.open("backupsms.xml");

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

            //xpp.setInput(context.openFileInput("backupsms2.xml"), "utf-8");

            //3.获取当前xml行的事件类型

            int type = xpp.getEventType();

            //4.判断事件类型是否是文档结束的事件类型

            while(type != XmlPullParser.END_DOCUMENT){

                //5.如果不是,循环遍历解析每一行的数据。解析一行后,获取下一行的事件类型



                String currentTagName = xpp.getName();

                //判断当前行的事件类型是开始标签还是结束标签

                switch (type) {

                case XmlPullParser.START_TAG:

                    if(currentTagName.equals("Smss")){

                        //如果当前标签是Smss,需要初始化一个集合

                        arrayList = new ArrayList<SmsBean>();

                    }else if(currentTagName.equals("Sms")){



                        smsBean = new SmsBean();

                        smsBean.id = Integer.valueOf(xpp.getAttributeValue(null, "id"));



                    }else if(currentTagName.equals("num")){

                        smsBean.num =  xpp.nextText();

                    }else if(currentTagName.equals("msg")){

                        smsBean.msg =  xpp.nextText();

                    }else if(currentTagName.equals("date")){

                        smsBean.date =  xpp.nextText();

                    }

                    break;

                case XmlPullParser.END_TAG:

                    //当前结束标签是Sms的话,一条短信数据封装完成, 可以加入list中

                    if(currentTagName.equals("Sms")){

                        arrayList.add(smsBean);

                    }

                    break;

                default:

                    break;

                }



                type = xpp.next();//获取下一行的事件类型

            }



            return arrayList.size();



        }catch (Exception e) {

            e.printStackTrace();

        }

        return 0;

    }

Android使用pull解析xml格式的数据的更多相关文章

  1. scrapy 解析xml格式的数据

    XMLFeedSpider 主要用于 解析 xml格式的数据 创建一个scrapy 项目文件 scrapy startproject xxx 创建一个spider scrapy genspider - ...

  2. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  3. Android中用PULL解析XML

    解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...

  4. Android使用pull解析xml

    一.理论准备     Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, ...

  5. android——使用pull解析xml文件

    1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...

  6. [android] 采用pull解析xml文件

    /***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...

  7. Android中pull解析XML文件的简单使用

    首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...

  8. 解析XML格式数据

    学习解析XML格式的数据前,搭建一个简单的web服务器,在这个服务器上提供xml文本用于练习. 一.搭建Apache服务器 在Apache官网下载编译好的服务器程序,安装.对于Windows来说127 ...

  9. NSXMLParser解析xml格式

    NSXMLParser解析xml格式的数据 用法如下: 首先,NSXMLParser必须继续NSXMLParserDelegate协议 @interface XMLHelper : NSObject ...

随机推荐

  1. vue基于Blob.js和 Export2Excel.js做前端导出

    1安装三个依赖包 npm install -S file-saver@2.0.2 npm install -S xlsx@0.15.6 npm install -D script-loader@0.7 ...

  2. Java程序设计基础笔记 • 【第5章 循环结构】

    全部章节   >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...

  3. Java面向对象笔记 • 【第4章 抽象类和接口】

    全部章节   >>>> 本章目录 4.1 抽象类 4.1.1 抽象方法和抽象类 4.1.2 抽象类的作用 4.1.3 实践练习 4.2 final修饰符 4.2.1 final ...

  4. docker学习:docker---kafka安装

    下载zookeeper镜像与kafka镜像: docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 本地启动zookeep ...

  5. Tomcat8/9的catalina.out中文乱码问题解决

    OS: Red Hat Enterprise Linux Server release 7.8 (Maipo) Tomcat: 9 中文显示为???问号 在$CATALINA_HOME/conf下的l ...

  6. Mysql查询阻塞的sql

    SELECTp2.`HOST` 被阻塞方host,p2.`USER` 被阻塞方用户,r.trx_id 被阻塞方事务id,r.trx_mysql_thread_id 被阻塞方线程号,TIMESTAMPD ...

  7. nuxt 相关

    https://github.com/xuqiang521/nuxt-ssr-demo https://www.cnblogs.com/laozhang-is-phi/p/10249248.html ...

  8. jQuery里的mouseover与mouseenter事件类型区别

    JQ里面有mouseover和mouseenter  2个事件类型干着差不多的活,用不好经常出现些小问题. 今天我解释一下原理: 事件类型翻译: mouseover 鼠标移上 mouseenter 鼠 ...

  9. Texture+PBR两种工作流程

    一.导入Texture 1.Inpspector TextureSize 2的n次幂,底层图形学需要,计算更快:不使用2的倍数,系统也会添加像素补全2n: 有最大尺寸限制8k,cubemap最高4k: ...

  10. 网络协议学习笔记(八)DNS协议和HttpDNS协议

    概述 上一篇主要讲解了流媒体协议和p2p协议,现在我给大家讲解一下关于DNS和HttpDNS的相关知识. DNS协议:网络世界的地址簿 在网络世界,也是这样的.你肯定记得住网站的名称,但是很难记住网站 ...