Android之XML序列化和解析
XML文件是一种常用的文件格式,可以用来存储与传递数据 ,本文是XML文件序列化与解析的一个简单示例
写文件到本地,并用XML格式存储
/**
* 写xml文件到本地
*/
private void writeXmlToLocal() {
List<Person> personList = getPersonList();
// 获得序列化对象
XmlSerializer serializer = Xml.newSerializer();
try {
File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
FileOutputStream fos = new FileOutputStream(path);
// 指定序列化对象输出的位置和编码
serializer.setOutput(fos, "utf-8");
serializer.startDocument("utf-8", true); // 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
serializer.startTag(null, "persons"); // <persons>
for (Person person : personList) {
// 开始写人
serializer.startTag(null, "person"); // <person>
serializer.attribute(null, "id", String.valueOf(person.getId()));
// 写名字
serializer.startTag(null, "name"); // <name>
serializer.text(person.getName());
serializer.endTag(null, "name"); // </name>
// 写年龄
serializer.startTag(null, "age"); // <age>
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age"); // </age>
serializer.endTag(null, "person"); // </person>
}
serializer.endTag(null, "persons"); // </persons>
serializer.endDocument(); // 结束
} catch (Exception e) {
e.printStackTrace();
}
}
private List<Person> getPersonList() {
List<Person> personList = new ArrayList<Person>();
for (int i = 0; i < 30; i++) {
personList.add(new Person(i, "wang" + i, 18 + i));
}
return personList;
}
XML解析实现
private List<Person> parserXmlFromLocal() {
try {
File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
FileInputStream fis = new FileInputStream(path);
// 获得pull解析器对象
XmlPullParser parser = Xml.newPullParser();
// 指定解析的文件和编码格式
parser.setInput(fis, "utf-8");
int eventType = parser.getEventType(); // 获得事件类型
List<Person> personList = null;
Person person = null;
String id;
while(eventType != XmlPullParser.END_DOCUMENT) {
String tagName = parser.getName(); // 获得当前节点的名称
switch (eventType) {
case XmlPullParser.START_TAG: // 当前等于开始节点 <person>
if("persons".equals(tagName)) { // <persons>
personList = new ArrayList<Person>();
} else if("person".equals(tagName)) { // <person id="1">
person = new Person();
id = parser.getAttributeValue(null, "id");
person.setId(Integer.valueOf(id));
} else if("name".equals(tagName)) { // <name>
person.setName(parser.nextText());
} else if("age".equals(tagName)) { // <age>
person.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG: // </persons>
if("person".equals(tagName)) {
// 需要把上面设置好值的person对象添加到集合中
personList.add(person);
}
break;
default:
break;
}
eventType = parser.next(); // 获得下一个事件类型
}
return personList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
测试结果
public class TestCase extends AndroidTestCase {
public void test() {
// writeXmlToLocal();
List<Person> personList = parserXmlFromLocal();
for (Person person : personList) {
Log.i("TestCase", person.toString());
}
}
完成
Android之XML序列化和解析的更多相关文章
- 一起学Android之Xml与Json解析
概述 在网络中,数据交互通常是以XML和Json的格式进行,所以对这两种格式的数据进行解析,是Android开发中的必备功能,本文以一个简单的小例子,简述Android开发中Xml和Json解析的常用 ...
- Android 使用xml序列化器生成xml文件
在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...
- android基础---->XMl数据的解析
在网络上传输数据时最常用的格式有两种,XML和JSON,下面首先学一下如何解析XML格式的数据,JSON的解析可以参见我的博客(android基础---->JSON数据的解析).解析XML 格式 ...
- 在C#中使用属性控制 XML 序列化来解析XML
今天需要解析一个XML,这个XML和一般情况用.NET的序列化出来的格式不太一样. 我就又补习了一下. 分享一下学习成果吧. 示例代码下载: http://download.csdn.net/deta ...
- 【Android】XML文件的解析
1.首先我们可以在res包路径下创建一个raw包,然后在raw下创建一个email.xml 文件,并修改其内容如下: <?xml version="1.0" encoding ...
- android AndroidManifest.xml 属性详细解析
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...
- android菜鸟学习笔记19----Android数据存储(三)XML文件的解析及序列化
Android内置了PULL解析器的XPP3实现,以及SAX解析器等,可以直接使用PULL或SAX解析XML,直接把JAVA中进行PULL或SAX解析的代码直接拿来用,遗忘的话,可以参考java拾遗1 ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
随机推荐
- Android 服务类Service 的详细学习
http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有 ...
- App接口中json方式封装通信接口
封装json通信接口的类 <?php class Response{ /** * 按json方式输出通信数据 * @param integer $code状态码 * @param string ...
- C++ map 映照容器
map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较, ...
- JavaScript中call、apply、bind、slice的使用
1.参考资料 http://www.cnblogs.com/coco1s/p/4833199.html 2.归结如下 apply . call .bind 三者都是用来改变函数的this对象的指向 ...
- CSS小记
1.元素居中 (1)水平居中:指定宽度,然后margin auto 即可 .middle{ max-width:400px; //width:400px;//当浏览器被缩小,宽度小于元素宽度时,元素会 ...
- hdu 1048 The Hardest Problem Ever
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(Strin ...
- wireshark基本用法及过虑规则
wireshark基本用法及过虑规则 标签: wireshark基本语法wireshark使用方法wireshark包过虑规则 2015-02-03 18:44 10711人阅读 评论(0) 收藏 ...
- OpenXML_导入Excel到数据库(转)
(1).实现功能:通过前台选择.xlsx文件的Excel,将其文件转化为DataTable和List集合 (2).开发环境:Window7旗舰版+vs2013+Mvc4.0 (2).在使用中需要用到的 ...
- linux cp命令参数及用法详解
cp (复制档案或目录)[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[root@linux ~]# cp [options] ...
- 和我一起来了解SEO
基础知识 搜索引擎 搜索引擎爬虫会检索各个网站,分析他们的关键字,从一个连接到另一个连接,如果爬虫觉得这个关键字是有用的 就会存入搜索引擎数据库,反之如果没用的.恶意的.或者已经在数据库的,就会舍弃. ...