博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之XML序列化和解析
阅读量:5280 次
发布时间:2019-06-14

本文共 3991 字,大约阅读时间需要 13 分钟。

XML文件是一种常用的文件格式,可以用来存储与传递数据 ,本文是XML文件序列化与解析的一个简单示例

写文件到本地,并用XML格式存储

/**     * 写xml文件到本地     */    private void writeXmlToLocal() {        List
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); // 写开始
serializer.startTag(null, "persons"); //
for (Person person : personList) { // 开始写人 serializer.startTag(null, "person"); //
serializer.attribute(null, "id", String.valueOf(person.getId())); // 写名字 serializer.startTag(null, "name"); //
serializer.text(person.getName()); serializer.endTag(null, "name"); //
// 写年龄 serializer.startTag(null, "age"); //
serializer.text(String.valueOf(person.getAge())); serializer.endTag(null, "age"); //
serializer.endTag(null, "person"); //
} serializer.endTag(null, "persons"); //
serializer.endDocument(); // 结束 } catch (Exception e) { e.printStackTrace(); } } private List
getPersonList() { List
personList = new ArrayList
(); for (int i = 0; i < 30; i++) { personList.add(new Person(i, "wang" + i, 18 + i)); } return personList; }

XML解析实现

private List
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
personList = null; Person person = null; String id; while(eventType != XmlPullParser.END_DOCUMENT) { String tagName = parser.getName(); // 获得当前节点的名称 switch (eventType) { case XmlPullParser.START_TAG: // 当前等于开始节点
if("persons".equals(tagName)) { //
personList = new ArrayList
(); } else if("person".equals(tagName)) { //
person = new Person(); id = parser.getAttributeValue(null, "id"); person.setId(Integer.valueOf(id)); } else if("name".equals(tagName)) { //
person.setName(parser.nextText()); } else if("age".equals(tagName)) { //
person.setAge(Integer.parseInt(parser.nextText())); } break; case XmlPullParser.END_TAG: //
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
personList = parserXmlFromLocal(); for (Person person : personList) { Log.i("TestCase", person.toString()); } }

完成

转载于:https://www.cnblogs.com/jjx2013/p/6223722.html

你可能感兴趣的文章
bzoj 2257 (JSOI 2009) 瓶子与燃料
查看>>
11)Java abstract class 和 interface
查看>>
使用xrdp或Xmanager 远程连接 CentOS6
查看>>
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>