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. PathCopyCopy一键复制文件路径

    1.简介 PathCopyCopy一键复制文件/文件夹名称和路径, 右键文件或者文件夹,可以复制名称,路径和父目录等. 2.推荐理由 当我们想拷贝文件名或者文件路径时,简直是神器啊,实测真的好用. 还 ...

  2. mongdb集群

    一.mongodb的集群 mongodb有两种架构: 第一种架构:和mysql的结构类似,也有主从结构,但是他不能实现故障自动切换 于是有了第二种架构.官方不推荐使用这种架构. 第二种:mongodb ...

  3. httprunner2.0 概述及使用说明

    一.概述 HttpRunner是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 二.系统流程 ...

  4. nvm切换node版本出现乱码 exit status 1:

    nvm切换nodejs版本出现exit status 1:乱码 跟着网上的教程一步一步做,还是出现问题.浪费一下午的时间 最后发现却因为我没用CMD管理员权限运行 扑街 解决方法: 用管理员身份运行就 ...

  5. react中虚拟DOM

    简单来说虚拟DOM就是一个js对象,相对于真实dom来做比较更节约性能,虚拟DOM执行过程如下

  6. hal 编码器做用户输入时捕获初值的设置

    uint16_t encoderDirection = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3); uint16_t encoderValue = __HA ...

  7. 基于Spring实现策略模式

    背景: 看多很多策略模式,总结下来实现原理大体都差不多,在这里主要是讲解下自己基于Spring更优雅的实现方案:这个方案主要是看了一些开源rpc和Spring相关源码后的一些思路,所以在此进行总结 首 ...

  8. Python多环境管理神器(Anaconda)

    为了解决python多版本共存,解决不同版本之间的依赖冲突,虚拟环境隔离等问题,我们前面介绍了venv.virtualenv.virtualenvwrapper.pyenv.pipenv等众多工具.下 ...

  9. Docsify部署IIS

    什么是Docsify? 一个神奇的文档网站生成器.docsify 可以快速帮你生成文档网站.不同于 GitBook.Hexo 的地方是它不会生成静态的 .html 文件,所有转换工作都是在运行时.如果 ...

  10. 为什么JavaWeb要分层

    首先bai让我们坐着时光机回到n年前的web开发.那个时候最早du都是静态的html页面,zhi后来有了数据库,有了所谓dao的动态页面,然后程序猿在编码的时候,会把所有的代码都写在页面上,包括数据库 ...