android 生成、pull解析xml文件



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.generatexml.MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="短信备份1"
        android:id="@+id/btn1"
        android:onClick="backupSms1" />
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="短信备份2"
        android:id="@+id/btn2"
        android:layout_below="@id/btn1"
        android:onClick="backupSms2" />
    
     <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取xml数据"
        android:id="@+id/btn3"
        android:layout_below="@id/btn2"
        android:onClick="getXml" />
     <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_get"
        android:layout_below="@id/btn3"
        android:onClick="getXml" />
         />

</RelativeLayout>


 

package com.example.generatexml;

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

import org.xmlpull.v1.XmlSerializer;

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.example.generatexml.domain.SmsInfo;


public class MainActivity extends ActionBarActivity {
    
    private List<SmsInfo> list;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        list = new ArrayList<SmsInfo>();
        long phone = 1880075555;
        for(int i=0;i<10;i++)
        {
            SmsInfo info = new SmsInfo(i, System.currentTimeMillis(),"<短信内容"+i,phone+i+"",i/2+1);
            list.add(info);
        }
    }
    
    
    public void backupSms1(View v){
        
        try {
            File file = new File(Environment.getExternalStorageDirectory(),"backup1.xml");
            FileOutputStream fos = new FileOutputStream(file);
            
            StringBuffer sb = new StringBuffer();
            
            sb.append("<?xml version="1.0" encoding="utf-8"?>");
            
            sb.append("<smss>");
            
            for(SmsInfo s :list)
            {
                sb.append("<sms>");
                
                sb.append("<body>"+s.getBody()+"</body>");
                sb.append("<type>"+s.getType()+"</type>");
                sb.append("<addr>"+s.getAddr()+"</addr>");
                sb.append("<date>"+s.getDate()+"</date>");
                
                sb.append("</sms>");
                
            }
            
            sb.append("</smss>");
            
            fos.write(sb.toString().getBytes());
            fos.close();
            Toast.makeText(this, "保存成功", 0).show();
        } catch (Exception e) {
            
            e.printStackTrace();
            Toast.makeText(this, "保存失败", 0).show();
        }
        
        
        
    }
    
    public void backupSms2(View v)
    {
        
        try {
            XmlSerializer ser = Xml.newSerializer();
            File file = new File(Environment.getExternalStorageDirectory(),"backup2.xml");
            FileOutputStream os = new FileOutputStream(file);
            ser.setOutput(os, "utf-8");
            
            ser.startDocument("utf-8", true);
            
            ser.startTag(null, "smss");
            
            for(SmsInfo s :list)
            {
                ser.startTag(null, "sms");
                
                ser.attribute(null, "id", s.getId()+"");
                
                ser.startTag(null, "body");
                ser.text(s.getBody());
                ser.endTag(null, "body");
                
                ser.startTag(null, "type");
                ser.text(s.getType()+"");
                ser.endTag(null, "type");
                
                ser.startTag(null, "addr");
                ser.text(s.getAddr());
                ser.endTag(null, "addr");
                
                ser.startTag(null, "date");
                ser.text(s.getDate()+"");
                ser.endTag(null, "date");
                
                ser.endTag(null, "sms");
                
            }
            
            ser.endTag(null, "smss");
            
            ser.endDocument();
            
            os.close();
            
            Toast.makeText(this, "保存成功", 0).show();
            
        } catch(Exception e) {
            
            e.printStackTrace();
            Toast.makeText(this, "保存失败", 0).show();
        }
    }



}

//解析xml文件
public void getXml(View v) { TextView tv = (TextView)this.findViewById(R.id.tv_get); try { InputStream is = MainActivity.this.getClassLoader().getResourceAsStream("backup2.xml"); List<SmsInfo> list = ParserXmlService.getSmsInfos(is); StringBuffer sb = new StringBuffer(); for(SmsInfo s:list) { sb.append(s.toString()); } tv.setText(sb.toString()); Toast.makeText(this, sb.toString(), 0).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "xml解析失败", 0).show(); } }


 

解析xml文件的service代码


package com.example.generatexml.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.example.generatexml.domain.SmsInfo;

public class ParserXmlService {
    
    public static List<SmsInfo> getSmsInfos(InputStream is) throws Exception
    {
        
        System.out.println("service");
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(is, "utf-8");
        List<SmsInfo> list = null;
        SmsInfo sms = null;
        
        int type = parser.getEventType();
        
        while(type!=XmlPullParser.END_DOCUMENT)
        {
            
            switch(type)
            {
                case XmlPullParser.START_TAG:
                    if("smss".equals(parser.getName()))
                    {
                        list = new ArrayList<SmsInfo>();
                    }
                    else if("sms".equals(parser.getName()))
                    {
                        sms = new SmsInfo();
                        String id = parser.getAttributeValue(0);
                        sms.setId(Integer.parseInt(id));
                    }else if("body".equals(parser.getName()))
                    {
                        String body = parser.nextText();
                        sms.setBody(body);
                    }else if("addr".equals(parser.getName()))
                    {
                        String addr = parser.nextText();
                        sms.setAddr(addr);
                    }
                    else if("date".equals(parser.getName()))
                    {
                        String date = parser.nextText();
                        sms.setDate(Long.parseLong(date));
                    }
                    else if("type".equals(parser.getName()))
                    {
                        String infoType = parser.nextText();
                        sms.setDate(Integer.parseInt(infoType));
                    }
                
                    break;
                case XmlPullParser.END_TAG:
                    if("sms".equals(parser.getName()))
                    {
                        list.add(sms);
                        sms = null;
                    }
                    break;
            }
            type = parser.next();
        }
        
        return list;
        
    }

}


 
原文地址:https://www.cnblogs.com/zoro-zero/p/3930304.html