Android开发笔记——序列化和解析XML文件

来源:互联网 发布:单片机lcd液晶显示 编辑:程序博客网 时间:2024/06/06 02:16

有时候,在android上需要使用xml存储数据,那又该怎样保存和读取xml文件呢?

1、序列化文件

举个例子,要保存成如下的xml文件格式:

<infos><student><name></name><sex></sex><age></age></student></infos>

代码如下:

<span style="white-space:pre"></span>private boolean storeStudent2Local() {try {// 创建序列化对象XmlSerializer serializer = Xml.newSerializer();FileOutputStream fos = new FileOutputStream(path);serializer.setOutput(fos, "utf-8");<span style="white-space:pre"></span>//设置输出流及其编码方式serializer.startDocument("utf-8", true);// 文档的开始serializer.startTag(null, "infos");<span style="white-space:pre"></span>//节点的开始for (Student student : listStudent) {serializer.startTag(null, "student");serializer.startTag(null, "name");serializer.text(student.getName());serializer.endTag(null, "name");serializer.startTag(null, "sex");serializer.text(student.getSex());serializer.endTag(null, "sex");serializer.startTag(null, "age");serializer.text(String.valueOf(student.getAge()));serializer.endTag(null, "age");serializer.endTag(null, "student");}serializer.endTag(null, "infos");serializer.endDocument();// 文档结束return true;} catch (Exception e) {e.printStackTrace();}return false;}

2、读取xml文件

读取文件也是从上到下,一个节点一个节点得读的

<span style="white-space:pre"></span>private boolean restoreStudentFromLocal() {try {XmlPullParser parser = Xml.newPullParser();<span style="white-space:pre"></span>//获取xml解析器parser.setInput(new FileInputStream(path), "utf-8");<span style="white-space:pre"></span>//设置输入流以及解码方式int eventType = parser.getEventType();listStudent.clear();Student stu = null;String tagName = null;while (eventType != XmlPullParser.END_DOCUMENT) {tagName = parser.getName();switch (eventType) {case XmlPullParser.START_TAG:if ("infos".equals(tagName)) {<span style="white-space:pre"></span>//如果头结点<infos>,就创建学生集合listStudent = new ArrayList<Student>();} else if ("student".equals(tagName)) {stu = new Student();} else if ("name".equals(tagName)) {stu.setName(parser.getText());} else if ("sex".equals(tagName)) {stu.setSex(parser.getText());} else if ("age".equals(tagName)) {stu.setAge(Integer.parseInt(parser.getText()));}break;case XmlPullParser.END_TAG:<span style="white-space:pre"></span>//假如是</student>节点,就把student加入到集合中if ("student".equals(tagName)) {listStudent.add(stu);}break;default:break;}eventType = parser.next();<span style="white-space:pre"></span>//解析下一个节点}refreshStudentList();return true;} catch (Exception e) {e.printStackTrace();}return false;}



0 0
原创粉丝点击