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

posted @ 2016-07-12 21:05  iFat  阅读(276)  评论(0编辑  收藏  举报