xml文件的生成与解析

生成方法一:同事StringBuffer类对xml文件格式解析写入

package com.steel_rocky.xml;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity  implements OnClickListener
{
    
    Button back_up = null;
    Button restore = null;
    private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        back_up = (Button) findViewById(R.id.back_up);
        back_up.setOnClickListener(this);
        restore = (Button) findViewById(R.id.restore);
        restore.setOnClickListener(this);
        
    }

    @Override
    public void onClick(View v)
    {
        int id = v.getId();
        
        switch (id)
        {
        case R.id.back_up:
            if(SmsUtils.backupSms(mContext))
                Toast.makeText(mContext, "备份成功", Toast.LENGTH_SHORT).show();
            
            break;
        case R.id.restore:
            
            break;

        default:
            break;
        }
    }
}
package com.steel_rocky.xml;

import java.io.FileOutputStream;
import java.util.ArrayList;

import android.content.Context;

public class SmsUtils
{

    public static boolean backupSms(Context context)
    {

        // 获取短信内容 list

        ArrayList<SmsBean> allSms = SmsDao.getAllSms();

        // 封装数据XML格式封装到stringbuffer中

        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version=\"1.0\" encoding=\"utf-8\" standalone='yes' ?>");

        sb.append("<Smss>");
        for (SmsBean smsBean : allSms)
        {
            sb.append("<Sms id = \"" + smsBean.id + "\">");
            sb.append("<num>");
            sb.append(smsBean.num);
            sb.append("</num>");
            sb.append("<msg>");
            
            
            sb.append(smsBean.msg);
            sb.append("</msg>");
            sb.append("<date>");
            sb.append(smsBean.date);
            sb.append("</date>");
            sb.append("</Sms>");
        }
        sb.append("</Smss>");

        try
        {
            FileOutputStream fileOutputStream = context.openFileOutput(
                    "backup.xml", Context.MODE_PRIVATE);

            fileOutputStream.write(sb.toString().getBytes());

            fileOutputStream.close();

            return true;
        } catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }

}
package com.steel_rocky.xml;

import java.util.ArrayList;

public class SmsDao
{

    public static ArrayList<SmsBean> getAllSms()
    {
        ArrayList<SmsBean> arrayList = new  ArrayList<SmsBean>();
        SmsBean smsBean1 = new SmsBean();
        smsBean1.id = 1;
        smsBean1.num = "110";
        smsBean1.msg = "警局";
        smsBean1.date = "2016-12-12";
        arrayList.add(smsBean1);
        SmsBean smsBean2 = new SmsBean();
        smsBean2.id = 1;
        smsBean2.num = "120";
        smsBean2.msg = "医院";
        smsBean2.date = "2016-12-12";
        arrayList.add(smsBean2);
        SmsBean smsBean3 = new SmsBean();
        smsBean3.id = 1;
        smsBean3.num = "119";
        smsBean3.msg = "消防";
        smsBean3.date = "2016-12-12";
        arrayList.add(smsBean3);
        
        return arrayList;
        
    }

}
package com.steel_rocky.xml;

public class SmsBean
{
    public String num;
    public String msg;
    public String date;
    public int id;
}

二、通过AndroidXml类获取xml生成方法写入

package com.steel_rocky.xml;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity  implements OnClickListener
{
    
    Button back_up = null;
    Button restore = null;
    private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        back_up = (Button) findViewById(R.id.back_up);
        back_up.setOnClickListener(this);
        restore = (Button) findViewById(R.id.restore);
        restore.setOnClickListener(this);
        
    }

    @Override
    public void onClick(View v)
    {
        int id = v.getId();
        
        switch (id)
        {
        case R.id.back_up:
            if(SmsUtils.backUpAndroid(mContext))
                Toast.makeText(mContext, "备份成功", Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(mContext, "备份失败", Toast.LENGTH_SHORT).show();

            
            break;
        case R.id.restore:
            
            break;

        default:
            break;
        }
    }
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.xmlpull.v1.XmlSerializer;

import android.content.Context;
import android.util.Xml;

public class SmsUtils
{

    public static boolean backUpAndroid(Context context)
    {
        try
        
        {
            //0. 获取短信内容 list

            ArrayList<SmsBean> allSms = SmsDao.getAllSms();
        //1.通过Xml获取一个XmlSerializer对象
        XmlSerializer newSerializer = Xml.newSerializer();
        //2.设置XmlSerializer的一些参数,比如:设置写入的xml文件的流对象
    
            newSerializer.setOutput(context.openFileOutput("my.xml", Context.MODE_PRIVATE), "utf-8");
            
            //3.序列化xml的声明头
            newSerializer.startDocument("utf-8", true);
            
            //4.系列化一个根节点的开始节点
            newSerializer.startTag(null, "Smss");
            
            //5.循环遍历list集合
            
            for (SmsBean smsBean : allSms)
            {
                newSerializer.startTag(null, "Sms");
                newSerializer.attribute(null, "id", smsBean.id + "");
                newSerializer.startTag(null, "num");
                
                newSerializer.text(smsBean.num);
                newSerializer.endTag(null, "num");
                newSerializer.startTag(null, "msg");
                
                newSerializer.text(smsBean.msg);
                newSerializer.endTag(null, "msg");
                newSerializer.startTag(null, "date");
                
                newSerializer.text(smsBean.date);
                newSerializer.endTag(null, "date");
                
                newSerializer.endTag(null, "Sms");
            }
            //6.序列化一个根节点的结束节点
            newSerializer.endTag(null, "Smss");
            //7.将xml写入到文件中,完成xml的序列化
            newSerializer.endDocument();
            
            return true;
            
            
        } catch (IllegalArgumentException e)
        {
            e.printStackTrace();
        } catch (IllegalStateException e)
        {
            e.printStackTrace();
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        return false;
    }
}
package com.steel_rocky.xml;

import java.util.ArrayList;

public class SmsDao
{

    public static ArrayList<SmsBean> getAllSms()
    {
        ArrayList<SmsBean> arrayList = new  ArrayList<SmsBean>();
        SmsBean smsBean1 = new SmsBean();
        smsBean1.id = 1;
        smsBean1.num = "110";
        smsBean1.msg = "警局";
        smsBean1.date = "2016-12-12";
        arrayList.add(smsBean1);
        SmsBean smsBean2 = new SmsBean();
        smsBean2.id = 1;
        smsBean2.num = "120";
        smsBean2.msg = "医院";
        smsBean2.date = "2016-12-12";
        arrayList.add(smsBean2);
        SmsBean smsBean3 = new SmsBean();
        smsBean3.id = 1;
        smsBean3.num = "119";
        smsBean3.msg = "消防";
        smsBean3.date = "2016-12-12";
        arrayList.add(smsBean3);
        
        return arrayList;
        
    }

}
package com.steel_rocky.xml;

public class SmsBean
{
    public String num;
    public String msg;
    public String date;
    public int id;
}

XML文件的解析:

dom解析:基于全文加载的解析方式——即要将文件全部加载到内存才能解析

sax解析:基于事件的逐行解析方式——

pull解析:同sax解析方式

posted @ 2016-12-12 19:52  Youxian  阅读(272)  评论(0)    收藏  举报