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序列化和解析的更多相关文章

  1. 一起学Android之Xml与Json解析

    概述 在网络中,数据交互通常是以XML和Json的格式进行,所以对这两种格式的数据进行解析,是Android开发中的必备功能,本文以一个简单的小例子,简述Android开发中Xml和Json解析的常用 ...

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

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

  3. android基础---->XMl数据的解析

    在网络上传输数据时最常用的格式有两种,XML和JSON,下面首先学一下如何解析XML格式的数据,JSON的解析可以参见我的博客(android基础---->JSON数据的解析).解析XML 格式 ...

  4. 在C#中使用属性控制 XML 序列化来解析XML

    今天需要解析一个XML,这个XML和一般情况用.NET的序列化出来的格式不太一样. 我就又补习了一下. 分享一下学习成果吧. 示例代码下载: http://download.csdn.net/deta ...

  5. 【Android】XML文件的解析

    1.首先我们可以在res包路径下创建一个raw包,然后在raw下创建一个email.xml 文件,并修改其内容如下: <?xml version="1.0" encoding ...

  6. android AndroidManifest.xml 属性详细解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  7. android基础---->JSON数据的解析

    上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...

  8. android菜鸟学习笔记19----Android数据存储(三)XML文件的解析及序列化

    Android内置了PULL解析器的XPP3实现,以及SAX解析器等,可以直接使用PULL或SAX解析XML,直接把JAVA中进行PULL或SAX解析的代码直接拿来用,遗忘的话,可以参考java拾遗1 ...

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

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

随机推荐

  1. Modular Query

    Solution F(L, R) 就是在A[L]在[L+1, R]内从左模到右. 首先应当注意到: 对$a, b > 0$ \[a \mod b \begin{cases} = a, & ...

  2. MyEclipse------在特定目录创建文件和书写内容

    readwrite.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  3. App接口中json方式封装通信接口

    封装json通信接口的类 <?php class Response{ /** * 按json方式输出通信数据 * @param integer $code状态码 * @param string ...

  4. php绝对路径与相对路径之间关系的的深入研究

    php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层../表示当前层.假如现在a/b/c/s.php要调用根目录下的 ...

  5. css absolute与relative的区别

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. C++_Eigen函数库用法笔记——The Array class and Coefficient-wise operations

    The advantages of Array Addition and subtraction Array multiplication abs() & sqrt() Converting ...

  7. (三)Linux命令基本格式以及文件处理命令

    命令基本格式 (1)命令提示符 如下是命令行的命令提示符,以此为例,讲解含义. 其中: root 当前登录用户名 localhost 主机名 ~ 当前所在的目录(即家目录,用户登录的初始位置) # 超 ...

  8. C# Window Service详解

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  9. 关于angularjs 中自定义过滤器

    包子认为,在angularjs中,经常需要用到自定义过滤器,来过滤相应的功能,自定义过滤器非常的简单,我就直接贴代码啦 其中input就是你需要进行操作的对象,,,用法就直接就是 是不是很easy.. ...

  10. [Android教程]EditText怎样限制用户的输入?数字/字母/邮箱

    有输入必有验证.为了防止用户随便输入确保提交数据的合法性,程序不得不在文本输入框(EditText)中增加限制或验证. 关于输入类型有数字.字母.邮箱.电话等形式,这些具体得根据业务来.那么Andro ...