Android之XML序列化和解析
来源:互联网 发布:java网上商城视频教程 编辑:程序博客网 时间:2024/05/16 05:28
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()); } }
完成
0 0
- Android之XML序列化和解析
- Android复习之旅--XML序列化和pull解析
- Android中xml解析和序列化
- android XML文件解析和序列化
- Android开发之基础-------XML文件的序列化和解析
- Android中SharedPreferences使用和xml解析和序列化
- xml解析和序列化
- xml解析和序列化
- .xml解析和序列化
- xml序列化和解析
- XML解析和序列化
- Android下xml文档的序列化和解析
- Android中xml的序列化和解析
- Android中XML文件的序列化和解析
- Android XML解析、序列化demo
- xml的pull解析和序列化
- 2.1xml解析和序列化
- andorid XML 序列化和解析
- Could not open ServletContext resource [/WEB-INF/dispatcherservlet-servlet.xml]
- 导航控制器在pushViewController时的动画卡顿问题
- switch(开关按钮) 控件的用法
- ViewGroup事件传递机制
- 机器学习的学习资源--入门书-进阶书-入门视频-继续阅读推荐
- Android之XML序列化和解析
- 排序算法--冒泡排序(一)
- oracle 使用sql获取数据库表,表的字段
- Smile - Statistical Machine Intelligence and Learning Engine
- ubuntu14.04系统加固(4)
- 【ZJOI2011】【BZOJ2229】最小割
- LayoutInflater.inflate的用法总结
- [4] 数组和指针的前世今生 - 指针篇
- 华为机试题ex002