• Android使用pull解析xml格式的数据


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

  • 相关阅读:
    列表方块与格式与布局
    框架与样式表的基本概念
    表单
    内容容器,常用标签
    CSS3
    表单验证
    练习题
    document对象
    windows对象
    函数
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5664886.html
Copyright © 2020-2023  润新知