序列化:

private void createXml() {
XmlSerializer serializer = Xml.newSerializer();// xml文件生成器
File file = new File(Environment.getExternalStorageDirectory(),
"person.xml");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码
       
       serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",true);//设置xml文件的自动格式化
       serializer.startDocument("utf-8", true);// 开始文档,参数分别为字符编码和是否保持独立 
            serializer.startTag(null, "persons"); // 开始标签,参数分别为:命名空间和标签名
for (Person person : list) { serializer.startTag(null, "person"); //对象的开始标签(对象为list集合的每一个元素)
serializer.attribute(null, "id", person.getId() + ""); //对象开始标签的属性 serializer.startTag(null, "name");// 开始标签
serializer.text(person.getName());// 文本内容
serializer.endTag(null, "name");// 结束标签 serializer.startTag(null, "sex");
serializer.text(person.getSex());
serializer.endTag(null, "sex"); serializer.startTag(null, "age");
serializer.text(person.getAge());
serializer.endTag(null, "age"); serializer.startTag(null, "address");
serializer.text(person.getAddress());
serializer.endTag(null, "address"); serializer.endTag(null, "person"); //对象的结束标签 }
serializer.endTag(null, "persons");// 结束标签
serializer.endDocument();// 结束xml文档
Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} }

解析:

    private List<Person> pullXml() {
try {
File file = new File(Environment.getExternalStorageDirectory(),
"person.xml");
FileInputStream fis = new FileInputStream(file);
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();// 获取xml解析器
parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环
switch (type) {
case XmlPullParser.START_TAG:    //开始标签
if ("persons".equals(parser.getName())) {//代表对象所在集合的开始标签
persons = new ArrayList<Person>();
} else if ("person".equals(parser.getName())) {//代表一个对象的开始;标签
person = new Person();
String id = parser.getAttributeValue(0);//得到标签的属性
person.setId(Integer.parseInt(id));
} else if ("name".equals(parser.getName())) {//对象的name属性的开始标签
person.setName(parser.nextText());  //得到开始标签和结束标签之间的文本内容
} else if ("sex".equals(parser.getName())) {//对象的sex属性的开始标签
person.setSex(parser.nextText());
} else if ("address".equals(parser.getName())) {//对象的address属性的开始标签
person.setAddress(parser.nextText());
} else if ("age".equals(parser.getName())) {  //对象的age属性的开始标签
person.setAge(parser.nextText());
}
break;
case XmlPullParser.END_TAG:  //结束标签
if ("person".equals(parser.getName())) {  //当得到代表对象的结束标签时,说明一个对象的数据采集完毕,将对象添加进集合
persons.add(person);
person = null;
}
break;
}
type = parser.next();// 继续往下查找
}
return persons;
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

最新文章

  1. visual studio 2015 开发android
  2. I() 方法
  3. final发布评语
  4. PHP防SQL注入不要再用addslashes和mysql_real_escape_string
  5. 设计宝库:22套精美的 PhotoShop 素材免费下载
  6. linux消息队列的使用及内核实现原理
  7. js如何实现一定时间后去执行一个函数
  8. ns2出现Client: Handoff Attempt的情况解决
  9. dump json 显示中文问题
  10. 使用node自动刷房源并发送可入住房源到邮箱
  11. 【JavaScript for循环实例】
  12. 推送本地项目至Github遇到的问题以及解决办法记录
  13. Oracle创建物化视图
  14. springboot+freemarker
  15. ListView 控件和 INotifyPropertyChanged 接口
  16. OpenGL + VS2015 + Windows10配置
  17. hadoop启动问题分析
  18. Navicat新建查询,系统找不到指定路径 独家解决办法
  19. VS2015编译GDAL2.2.1源码
  20. rsync的服务端和客户端搭建

热门文章

  1. OCX控件避免弹出安全警告的类
  2. 19.break和continue
  3. webpack 小demo
  4. Summit Online Judge
  5. Codeforces 1108F MST Unification MST + LCA
  6. HDFS源码分析三-DataNode实现
  7. mysql:视图,触发器
  8. JAVA实现DIJKSTRA算法
  9. 使用SQL访问MongoDB
  10. MFC控件:listctrl使用方法总结