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;

    }

最新文章

  1. Winform绑定数据源的几种方式?
  2. CAD2010中文版安装问题记录
  3. 【转载】.NET面试题系列[0] - 写在前面
  4. HDU 5775 Bubble Sort (线段树)
  5. Spring SimpleJdbcTemplate Querying examples
  6. angular ui-route
  7. C# 操作 Word 修改word的高级属性中的自定义属性2
  8. 关于Spring的Controller及Struts的Action的多线程的注意
  9. dedecms织梦如何删除所有的文章?
  10. [LeetCode] 141&amp;142 Linked List Cycle I &amp; II
  11. java中关于线程间协作所用关键字synchronized,wait,notify的用法
  12. Ubuntu_16.04_Lamp
  13. Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器
  14. iOS动画特效
  15. webpack打包The &#39;mode&#39; option has not been set,错误提示
  16. Python——模块——随机模块
  17. 简单 v.s. 基础
  18. ④品茶看&lt;Servlet&amp;JSP&gt;-EL表达式
  19. Linux下安装pymysql
  20. 洛谷 P1141【BFS】+记忆化搜索+染色

热门文章

  1. Mysql溯源-任意文件读取&#128123;
  2. Winform中使用HttpClient与后端api服务进行交互
  3. c++—通讯录管理系统
  4. Java初学者作业——使用记事本编写Java程序
  5. .NET 云原生架构师训练营(责任链模式)--学习笔记
  6. CentOS7 安装mysql并解决安装慢的问题
  7. VsCode安装与配置
  8. 【刷题-LeetCode】154 Find Minimum in Rotated Sorted Array II
  9. 【记录一个问题】android opencl c++: 使用event.SetCallBack()方法后,在回调函数中要再使用event.wait()才能得到profile信息
  10. spark中job stage task关系