Android开发之基础-------XML文件的序列化和解析

来源:互联网 发布:zank 知乎 编辑:程序博客网 时间:2024/05/18 13:05

xml文件作为一种数据存储文件是经常用得到的,下面针对xml文件的序列化和解析进行简单的总结

以短信备份为例:


1.找到控件设置点击事件


2.获取短信内容,以Bean对象的方式封装到list集合中


3.遍历list集合中的短信数据,存储到xml文件中

XmlSerializertry{//1.通过Xml获取一个XmlSerializer对象XmlSerializer xs = Xml.newSerializer();//2.设置要写入的xml文件的流信息//os:要写入的xml文件的流  encoding:流的编码xs.setOutput(context.openFileOutput("smsBackup2.xml", Context.MODE_PRIVATE), "utf-8");//3.序列化xml文件的声明头//encoding:xml声明头的编码   standalone:是否独立xs.startDocument("utf-8", true);//4.序列化一个根节点的开始标签//namespace:命名空间  name:标签的名称xs.startTag(null, "Smss");//5.循环遍历list集合,序列化一条一条的短信内容for (SmsBean smsBean : allSms) {xs.startTag(null, "Sms");//namespace:命名空间  name:属性的名称   value:属性的值xs.attribute(null, "id", smsBean.id);//序列化一个属性xs.startTag(null, "num");xs.text(smsBean.num);//序列化一个文本内容xs.endTag(null, "num");xs.startTag(null, "msg");xs.text(smsBean.msg);//序列化一个文本内容xs.endTag(null, "msg");xs.startTag(null, "date");xs.text(smsBean.date);//序列化一个文本内容xs.endTag(null, "date");xs.endTag(null, "Sms");}//6.序列化一个根节点的结束标签xs.endTag(null, "Smss");//7.将xml写入文件xs.endDocument();return true;}catch (Exception e) {e.printStackTrace();}
//xml文件的解析   *************************************************************************************************//  
/**
*xml文件的解析有三种方法,dom解析   sax解析  pull解析   后两种方法一样,dom解析需要完全加载整个文档到内存中,如果文件较大
*就会浪费内存,所以使用了pull解析
*/
<pre name="code" class="html">try{ ArrayList<SmsBean> arrayList = null; SmsBean bean = null;//1.通过xml获取一个xmlPullParser对象XmlPullParser xpp = Xml.newPullParser();//2.设置要解析的是哪个xml文件//inputStream:要解析的那个xml文件的读取流   inputEncoding:流的编码xpp.setInput(context.openFileInput("smsBackup2.xml"), "utf-8");//3.获取当前xml行的事件类型int type = xpp.getEventType();//4.循环判断事件类型是否是文档结束类型while(type != XmlPullParser.END_DOCUMENT){//5.如果不是文档结束类型,可以解析当前行的内容,需要判断标签的信息String currentTagName = xpp.getName();//获取当前行的标签名称switch (type) {case XmlPullParser.START_TAG://开始标签if("Smss".equals(currentTagName)){//如果当前标签是Smss,需要初始化一个集合arrayList = new ArrayList<SmsBean>();}else if("Sms".equals(currentTagName)){ bean = new SmsBean(); //获取Sms标签上的id属性 bean.id = xpp.getAttributeValue(null, "id");}else if("num".equals(currentTagName)){bean.num =  xpp.nextText();//如果当前标签是开始标签,下一个标签是内容,该方法返回下一个元素的内容}else if("msg".equals(currentTagName)){bean.msg =  xpp.nextText();//如果当前标签是开始标签,下一个标签是内容,该方法返回下一个元素的内容}else if("date".equals(currentTagName)){bean.date =  xpp.nextText();//如果当前标签是开始标签,下一个标签是内容,该方法返回下一个元素的内容}break;case XmlPullParser.END_TAG:if("Sms".equals(currentTagName)){arrayList.add(bean);}break;default:break;}//6.解析一行后需要获取下一行事件的类型进行判断解析。type = xpp.next();}return arrayList.size();}catch (Exception e) {e.printStackTrace();}


0 0