从头学android_Pull解析器解析xml文件

来源:互联网 发布:java 调用vbs 编辑:程序博客网 时间:2024/06/17 12:32

解析xml

在android中解析xml有三种方式,dom,sax,pull,其中dom是JavaSE内置的直接就可以解析,但是会将整个文档全部加载进入内存,对资源耗费比较大,sax的解析和JavaWeb中的原理方式也都相同,是一行一行的加载,另外android中提供了google建议使用的pull解析器,这种方式跟sax大致相同。

代码

//加载xml        InputStream inputStream = null;        try {            //加载xml            inputStream = new FileInputStream(new File(getFilesDir(), "xmlSerializer.xml"));            //获取pull解析器            XmlPullParser parser = Xml.newPullParser();            //初始化pull解析器            parser.setInput(inputStream, "utf-8");            //获取当前结点事件            int evenType = parser.getEventType();            ArrayList<Message> messages = null;            Message msg = null;            while (evenType != XmlPullParser.END_DOCUMENT) {                //判断结点                switch (evenType) {                    case XmlPullParser.START_TAG: {                        if ("messages".equalsIgnoreCase(parser.getName()))//是<messages>结点                        {                            messages = new ArrayList();                        } else if ("msg".equalsIgnoreCase(parser.getName())) {//是<msg>结点                            msg = new Message();                        } else if ("body".equalsIgnoreCase(parser.getName())) {                            if (msg != null) {                                msg.setBody(parser.nextText());                            }                        } else if ("date".equalsIgnoreCase(parser.getName())) {                            if (msg!=null){                                msg.setDate(Long.parseLong(parser.nextText()));                            }                        } else if ("address".equalsIgnoreCase(parser.getName())) {                            if (msg!=null){                                msg.setAddress(parser.nextText());                            }                        } else if ("type".equalsIgnoreCase(parser.getName())) {                            if (msg!=null){                                msg.setType(Integer.parseInt(parser.nextText()));                            }                        }                        break;                    }                    case XmlPullParser.END_TAG: {                        if ("msg".equalsIgnoreCase(parser.getName())){                            messages.add(msg);                            msg = null;                        }                        break;                    }                }                evenType = parser.next();            }            for(Message message : messages){                Log.i(TAG,message.toString());            }        } catch (Exception e) {            e.printStackTrace();        } finally {//关闭资源            if (inputStream!=null){                try {                    inputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }


0 0
原创粉丝点击