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

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

以短信备份为例:


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


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


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

		XmlSerializer
	
			try{
			//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();
		}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值