使用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();
        }
时间: 2024-12-27 23:09:59

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

使用XMl序列化器生成xml文件

生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"); //添加smss的开始节点 sb.append("<smss>"); ....... 把sb写到输出流中 fos.write(s

Android 使用xml序列化器生成xml文件

在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列化器对象 XmlSerializer xs = Xml.newSerializer();* 给序列化器设置输出流 File file = new File(Environment.getExternalStorageDirectory(), "backupsms.xml"); FileOu

android 利用pull解析xml数据

数据如下 <videoNews> <c:forEach items="${videos}" var="video" > <news id="${video.getId() }" > <title>${video.getName() }</title> <time>${video.getTime() }</time> </news> </c:for

IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除

1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件 using System.IO; /// <summary> /// 配置绝对路径 /// </summary> private static string LogPath = ConfigurationManager.AppSettings["LogPath&

Android 存储学习之保存系统短信到SD卡(使用XML序列化器)

上节中我们是手动拼接xml文件,但是上节中那样的做法会有一个问题,比如: //插入消息的内容 sBuffer.append("<body>"); sBuffer.append(sms.getBody() + "</body>"); sBuffer.append("</body>"); 我在插入消息内容的时候,在追加内容里面加了个 </body>. 这样就会出现解析错误的 所以这节我们使用xml的序列

Android程序解析XML文件的方法及使用PULL解析XML案例

一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM 以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构

在java项目中怎样利用Dom4j解析XML文件获取数据

在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进行直接读取,能够说这是程序中直接封装好的,包含配置文件里书写的格式等等.那么,假设.想要在配置文件里写一些其它的数据,直接以XML文件的格式进行书写.这个时候在后台怎样读取XML文件里的数据呢?这里利用Dom4j来解析XML文件里连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

在java项目中如何利用Dom4j解析XML文件获取数据

在以前的学习.net时经常会遇到利用配置文件来解决项目中一些需要经常变换的数据,比如数据库的连接字符串儿等.这个时候在读取配置文件的时候,我们通常会用到一个雷configuration,通过这个类来进行直接读取,可以说这是程序中直接封装好的,包括配置文件中书写的格式等等.那么,如果,想要在配置文件中写一些其他的数据,直接以XML文件的格式进行书写,这个时候在后台如何读取XML文件中的数据呢?这里利用Dom4j来解析XML文件中连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

android 通过pull解析xml文件

1 package com.example.xmldemo.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStreamReader; 9 import java.