首先,指定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();
}

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

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

    生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...

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

    在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...

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

    1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...

  4. xml生成方式二(Xml序列化器XmlSerializer)

    一.andoirdAPI提供了xml生成和解析的API: XmlSerializer xs = Xml.newSerializer();和XmlPullParser xmlPullParser = X ...

  5. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  6. .NET 二进制序列化器,SOAP序列化器,XML序列化器

    这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...

  7. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  8. Android SAX、DOM、Pull解析xml文件剖析与案例讲解

    XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...

  9. 使用PULL解析XML文件

    转载博文1:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后 ...

随机推荐

  1. Python天猫淘宝评论爬虫

    说明 由于Github 打包的exe某些文件上传被.gitignore了,所以不提供windows二进制包 https://github.com/hunterhug/taobaocomment 一个抓 ...

  2. SPOJ AMR10I Dividing Stones --DFS

    题意:给n个石头,分成一些部分(最多n部分,随便分),问分完后每部分的数量的乘积有多少种情况. 分析:可以看出,其实每个乘积都可以分解为素数的乘积,比如乘积为4,虽然可以分解为4*1,但是更可以分解为 ...

  3. Unity 协程与线程

    协程是不同步的 协程 不是 线程,协同程序是 不同步 的 一个线程在程序中和其他线程是异步运行的,在多处理器机器中一个线程可以同时与所有其他线程的实时运行其代码,这使得线程编程能够解决很复杂的事情,因 ...

  4. mysql查询语句包含有关键字

    查询mysql的时候,有时候mysql表名或者列名会有关键字.这时候查询会有错误.例如表名是order,查询时候会出错. 简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如se ...

  5. Python版任意进制转换

    def decimalToAny(num,n): baseStr = {10:"a",11:"b",12:"c",13:"d&qu ...

  6. treepanel加滚动条

  7. POJ 3461 Oulipo

      E - Oulipo Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  8. Install MySQL on Mac OS X——MAC安装MySQL

    很多关于如何安装MySQL的教程已经过时了,或者比必须的步骤复杂得多.这篇教程将展示如何安装MySQL,启动MySQL,以root用户进入MySQL,以及创建删除退出数据库. Step 1: 下载My ...

  9. 【C#】ContextMenuStrip 右键菜单颜色设置

    有些时候自己想要修改ContexMenuStrip右键菜单的一些背景色之类的,该如何实现呢? 首先: ContextMenuStrip _context = new ContextMenuStrip( ...

  10. GIS开源软件大全

    3 - F 3map:行星地球项目由3map驱动,这是一个自由软件,由Telstra宽带基金会创建并支持,提供客户端与服务器的能力以在线再现虚拟地球. Amein!:其界面介于ArcMap和UMN M ...