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. pandas tutorial

    目录 Series 利用dict来创建series 利用标量创建series 取 Dataframe 利用dict创建dataframe 选择 添加列 列移除 行的选择, 添加, 移除 Panel B ...

  2. oralce索引中INDEX SKIP SCAN 和 INDEX RANGE SCAN区别

    INDEX SKIP SCAN 当表中建立有复合索引的时候,查询时,除复合索引第一列外,别的列作为条件时,且优化器模式为CBO,这个时候查询可能会用到INDEX SKIP SCAN skip scan ...

  3. [opencv]<学习Opencv>英文原版翻译学习

    [注]下文全部内容为 <<Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library>>经由在线翻译整理 ...

  4. 使用JavaScript控制HTML元素的显示和隐藏

    利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: document.getElementB ...

  5. 每天学一点——while循环(2)、for循环

    while循环(2) while+continue 打印数字的话相信朋友们在python中不会一个个的print吧 eg: 或者是打印列表里的元素 eg 这种方法只适用于你知道里面有多少个元素, 不然 ...

  6. 安装rebar3

    下载编译好的版本 wget https://s3.amazonaws.com/rebar3/rebar3 chmod +x /home/hylink/rebar3 (赋权) ./rebar3 loca ...

  7. [学习笔记] SpringBoot 之 Helloworld

    创建项目 IDEA / File / New / Project / Spring Initalizr / Next Group: com.wu 公司官网域名反写 Artifact: hellowor ...

  8. 内联模板、X-Template

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script s ...

  9. OpenIddict 登录及详细流程解析

    GitHub上实例都是集成了Identity来实现,我这里去掉了相关东西,实现自定义的登录满足自己的结构要求 服务端配置添加数据库服务以及定时任务服务 builder.Services.AddDbCo ...

  10. VMware_克隆机器后主机Ping不同虚拟机,虚拟机能Ping通主机

    使用vm的克隆功能克隆一个系统,因为我克隆的系统使用的是静态IP,所以修改克隆机的ip地址,并且也修改MAC地址,启动后两个虚拟机,ping了下主机IP能Ping通,但是使用主机Ping虚拟机时发现P ...