使用XML序列化器生成XML文件和利用pull解析XML文件

首先,指定XML格式,我指定的XML格式如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<message>
    <sms>
        <body>
            陈驰0
        </body>
        <date>
            1462162910995
        </date>
        <address>
            1380
        </address>
        <type>
            1
        </type>
    </sms>
<message>

一、用xml序列化器来生成xml文件

//使用xml序列化器生成xml文件
        //1.拿到序列化器对象
        XmlSerializer xs = Xml.newSerializer();
        //2.初始化
        File file = new File(Environment.getExternalStorageDirectory(), "sms2.xml");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            //encoding:指定用什么编码生成xml文件
            xs.setOutput(fos, "utf-8");
            
            //3.开始生成xml文件
            //encoding:指定头节点中encoding属性的值
            //standalone:该xml文件是否独立
            xs.startDocument("utf-8", true);
            
            xs.startTag(null, "message");//开始节点
            
            for (Message msg : list) {
                xs.startTag(null, "sms");
                
                xs.startTag(null, "body");
                xs.text(msg.getBody());
                xs.endTag(null, "body");
                xs.startTag(null, "date");
                xs.text(msg.getDate());
                xs.endTag(null, "date");
                xs.startTag(null, "address");
                xs.text(msg.getAddress());
                xs.endTag(null, "address");
                xs.startTag(null, "type");
                xs.text(msg.getType());
                xs.endTag(null, "type");
                
                xs.endTag(null, "sms");
            }
            
            xs.endTag(null, "message");//结束节点
            
            //告诉序列化器,生成完毕
            xs.endDocument();
        } catch (Exception e) {
            e.printStackTrace();
        }
        

 二、利用pull解析xml文件

File file = new File(Environment.getExternalStorageDirectory(), "sms2.xml");
        try {
            FileInputStream fis = new FileInputStream(file);
            
            //拿到pull解析器对象
            XmlPullParser xp = Xml.newPullParser();
            //初始化
            xp.setInput(fis, "utf-8");
            
            //获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点,
            //从而确定我们应该做什么操作
            int type = xp.getEventType();
            Message msg = null;
            while(type != XmlPullParser.END_DOCUMENT){
                //根据节点的类型,进行不同的操作
                switch (type) {
                case XmlPullParser.START_TAG:
                    //获取当前结点的名字
                    if("message".equals(xp.getName())){
                        //创建Message集合对象
                        list = new ArrayList<Message>();
                    }else if ("sms".equals(xp.getName())) {
                        //创建Message的javabean
                        msg = new Message();
                    }else if ("body".equals(xp.getName())) {
                        //获取当前节点下一个节点的文本(即陈驰0)
                        msg.setBody(xp.nextText());
                    }else if ("date".equals(xp.getName())) {
                        //获取当前节点下一个节点的文本(即陈驰0)
                        msg.setDate(xp.nextText());
                    }else if ("address".equals(xp.getName())) {
                        //获取当前节点下一个节点的文本(即陈驰0)
                        msg.setAddress(xp.nextText());
                    }else if ("type".equals(xp.getName())) {
                        //获取当前节点下一个节点的文本(即陈驰0)
                        msg.setType(xp.nextText());
                    } 
                    break;
                case XmlPullParser.END_TAG:
                    if("sms".equals(xp.getName())){
                        list.add(msg);
                    }
                    break;

                default:
                    break;
                }
                
                //把指针移动到下一个节点,并返回该节点的事件类型
                type = xp.next();
            }
            
            for (Message message : list) {
                System.out.println(message);
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

 

posted @ 2016-05-06 20:05  DarrenChan陈驰  阅读(318)  评论(0编辑  收藏  举报
Live2D