xml解析

package com.banana.xmL.Utils;
/*
 * 生成对象
 */
public class Sms {
     public int id;
     public String number;
     public String msg;
     public String date;
     public Sms(){}
     public Sms(int id,String number,String msg,String date){
          this.id = id;
          this.number = number;
          this.msg = msg;
          this.date = date;
     }
}

-------------------------------------------------
package com.banana.xmL.Utils;
import java.util.ArrayList;
import java.util.List;
/*
 * 存储对象
 */
public class SmsDao {
     public static List<Sms> getAllSms() {
          List<Sms> list = new ArrayList<Sms>();
          list.add(new Sms(1,"110","维护治安","2016.1.1"));
          list.add(new Sms(2,"120","救人","2016.2.1"));
          list.add(new Sms(3,"119","救火","2016.3.1"));
          return list;
          
          
     }
}
-------------------------
package com.banana.xmL.Utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
/*
 * 生成xml XmlSerializer
 */
import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;
import android.util.Xml;
public class SmsUtils {
     public static boolean backupSms_android(Context context){
          List<Sms> list = SmsDao.getAllSms();
          //1通过android.util.Xml获取一个XmlSerializer对象
          XmlSerializer xs = Xml.newSerializer();
          //2设置XmlSerializer的一些参数,
          //os:xml文件写入流 endoing:流的编码
          try{
          xs.setOutput(context.openFileOutput("backupSms2.xml",Context.MODE_PRIVATE),"utf_8");
          //3.序列化一个xml的声明头  encoding:xml文件的编码 standalone:是否独立
          xs.startDocument("utf-8",true);
          //4序列化一个根节点开始节点
          xs.startTag(null, "Smss");
          for(Sms sms : list){
              xs.startTag(null, "Sms");
              xs.attribute(null, "id", sms.id+"");
              xs.startTag(null, "numer");
              xs.text(sms.number);
              xs.endTag(null, "numer");
              
              xs.startTag(null, "msg");
              xs.text(sms.msg);
              xs.endTag(null, "msg");
              
              xs.startTag(null,"date");
              xs.text(sms.date);
              xs.endTag(null, "date");
              
              xs.endTag(null, "Sms");
          }
          //序列化 一个根节点的结束节点
          xs.endTag(null, "Smss");
          //将xml写入文件,完成序列化
          xs.endDocument();
          return true;
          }catch (Exception e) {
              // TODO: handle exception
          }
          return false;
     }
     public static boolean backupSms(Context context) {
          
          //获取信息
          List<Sms> list = SmsDao.getAllSms();
          //生成xml
          StringBuffer sb = new StringBuffer();
          sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes'?>");
          sb.append("<Smss>");
          for(Sms sms : list){
              sb.append("<Sms id=\""+sms.id+"\">");
              
              sb.append("<number>");
              sb.append(sms.number);
              sb.append("</number>");
              
              sb.append("<msg>");
              sb.append(sms.msg);
              sb.append("</msg>");
              
              sb.append("<date>");
              sb.append(sms.date);
              sb.append("</date>");
              
              sb.append("</Sms>");
          }
          sb.append("</Smss>");
          //备份数据到私有目录
          FileOutputStream fos = null;
          String str = sb.toString();
          
          
          Log.i("SmsUtils", "......................"+fos+str);
          try {
              fos=context.openFileOutput("backupsms.xml", Context.MODE_PRIVATE);
              Log.i("SmsUtils", "......................"+fos);
              fos.write(str.getBytes());
              return true;
          } catch (Exception e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }finally{
              if(fos!=null){
                   try {
                        fos.close();
                   } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                   }
              }
          }
          return false;
          
     }
//解析读取内容
     public static int restoreSms(Context mcontext) {
          List<Sms> list = null;
          Sms sms = null;
          
          try{
          //1.通过Xml湖区一个XmlPullParser对象
          XmlPullParser xpp = Xml.newPullParser();
          
          //2.设置参数,
          /*//通过context获得一个资产管理对象
          AssetManager assets = mcontext.getAssets();
          
          //通过资产对象获取文件读取流
          InputStream ins = assets.open("backupSms2.xml");
          xpp.setInput(ins, "UTF-8");*/
          xpp.setInput(mcontext.openFileInput("backupsms.xml"),"utf-8");
          
          //3获取当前事件类型
          int type = xpp.getEventType();
          
          //4.判断事件类型是否文档结束类型,如果不是循环解析,获取下一行时间按类型
          while(type!=XmlPullParser.END_DOCUMENT){
              String curTagName = xpp.getName();
              
              //判断当前是开始标签还是结束标签
              switch(type){
              case XmlPullParser.START_TAG:
                   if("Smss".equals(curTagName)){
                        //判断如果是Smss则创建集合
                        list = new ArrayList<Sms>();
                        
                   }else if("Sms".equals(curTagName)){
                        sms = new Sms();
                        sms.id = Integer.valueOf(xpp.getAttributeValue(null,"id"));
                   
                   }else if("number".equals(curTagName)){
                        sms.number = xpp.nextText();
                   
                   }else if("msg".equals(curTagName)){
                        sms.msg = xpp.nextText();
                   
                   }else if("date".equals(curTagName)){
                        sms.date = xpp.nextText();
                   }
                   break;
                   
              case XmlPullParser.END_TAG:
                   //当前是结束标签Sms则加入list
                   if("Sms".equals(curTagName)){
                        list.add(sms);
                   }
                   break;
              }
              
              type = xpp.next();//获取下一行事件类型
          }
          return list.size();
          }catch (Exception e) {
              // TODO: handle exception
          }
          return 0;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值