zoukankan      html  css  js  c++  java
  • 使用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();
            }
  • 相关阅读:
    个人案例分析
    软工结对作业
    交点问题
    C语言复习
    【软件工程】提问回顾与个人总结
    【技术博客】Arxiv的新Paper获取和机翻
    【技术博客】动态面包屑导航
    对对碰 -- 软工结对编程博客
    交点计数 -- 软工个人项目作业
    面向对象的程序设计-模块四课程总结
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5466961.html
Copyright © 2011-2022 走看看