Android中使用XmlPullParser操作简单的xml文件
2016-03-16 21:09
731 查看
在开发的过程中,如果需要保存少量数据,可以使用xml来保存,尽量不使用数据库。解析xml的方式有Dom,Sax,Dom4j等,今天要学的是XmlPullParser。
我们先来看看要解析的文件格式是什么
XmlPullParser是从上到下对xml文件进行解析的,跟我们写xml文件的顺序是一样的,顺序获取每个节点的值,一次解析。
其实用法很简单,看代码的注释就应该知道怎么使用啦
首先是City这个bean
接着是解析操作咯
我们先来看看要解析的文件格式是什么
XmlPullParser是从上到下对xml文件进行解析的,跟我们写xml文件的顺序是一样的,顺序获取每个节点的值,一次解析。
其实用法很简单,看代码的注释就应该知道怎么使用啦
首先是City这个bean
public class City { private String country; private String city; private String sights; public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getSights() { return sights; } public void setSights(String sights) { this.sights = sights; } @Override public String toString() { return "City [country=" + country + ", city=" + city + ", sights=" + sights + "]"; } }
接着是解析操作咯
private List<City> getBean(InputStream inStream) throws Exception { List<City> cities = null; //首先获取一个解析器对象,然后规定字符集 XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(inStream, "UTF-8"); //获取当前Element的类型 (START_TAG, END_TAG, TEXT......) int eventType = pullParser.getEventType(); City city = null; //当它还没解析到文档的结束Element while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { //文档的开始 case XmlPullParser.START_DOCUMENT: cities = new ArrayList<City>(); break; //Element的开始节点,比如 <html> </html> <html>即是开始的Element,</html>为结束Element case XmlPullParser.START_TAG: /** * 通过获取pullParser.getName()获取当前节点的值, <city country="Greece"> pullParser.getAttributeValue(0) * 获取的是city这个节点的第一个属性即country的值 */ if( "city".equals(pullParser.getName()) ){ city = new City(); city.setCountry(pullParser.getAttributeValue(0)); } if( "name".equals(pullParser.getName()) ){ city.setCity(pullParser.nextText()); } if( "sights".equals(pullParser.getName())){ city.setSights(pullParser.nextText()); } break; //结束节点 case XmlPullParser.END_TAG: if( "city".equals(pullParser.getName()) ){ //将结果添加到集合,并且将bean对象置为空 cities.add(city); city = null; } break; default: break; } //需要调用这个方法,解析才会指向下一个节点 eventType = pullParser.next(); } return cities; }既然有了解析了,那应该会有写的方法
private void save(List<City> cities, OutputStream ou) throws Exception{ //获取写对象 XmlSerializer serializer = Xml.newSerializer(); //设置字符集 serializer.setOutput(ou, "UTF-8"); //设置文档开头声明,类似于<?xml version="1.0" encoding="utf-8"?> serializer.startDocument("UTF-8", true); //写入一个开始的Element serializer.startTag(null, "cities"); for(City city:cities){ //写下一个Element,并添加属性 serializer.startTag(null, "city"); serializer.attribute(null, "country", city.getCountry()); //写下一个Element,并添加包裹的文本 serializer.startTag(null, "name"); serializer.text(city.getCity()); serializer.endTag(null, "name"); serializer.startTag(null, "sights"); serializer.text(city.getSights()); serializer.endTag(null, "sights"); //结束Element serializer.endTag(null, "city"); } //最外层的结束Element serializer.endTag(null, "cities"); //完成xml的写入操作 serializer.endDocument(); //刷新输出流 ou.flush(); ou.close(); }
相关文章推荐
- android MPAndroidChart饼图实现图例后加数字或文本(定制图例)
- Android设计模式之23种设计模式一览
- Android:Paletee颜色提取用法(调色板)
- Android-改变文字颜色的上下文菜单
- Android零碎知识点-更新中
- Android笔记
- 大家陪我一起学Android之电话拨打器
- Android千变万化TextView(SpannableString全解析)
- Android新手入门2016(8)--ListView之ArrayAdapter
- 安卓应用:DoubleFacedCamera
- android调用系统相机拍照并保存在本地
- 安卓应用:蓝牙对聊
- Android应对进程被杀死--Activity
- Android课程---Android Studio简单设置
- 安卓应用:简单记事本
- 安卓游戏应用-连连看
- android中tabhost的使用
- 安卓游戏应用-变形金刚拼图
- android sdk 文件目录含义介绍
- Android内存泄漏终极解决篇