xml序列化到本地以及使用Pull解析xml

package com.tu.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.os.Environment;
import android.test.AndroidTestCase;
import android.util.Xml;

public class TuTest extends AndroidTestCase {


    public void test() {
//      List<Person> persons = this.getPersonList();
//      this.writeToLocal(persons);//寫到xml文件


        System.out.println("-------->開始");
//      List<Person> persons;
        List<Person>  persons = parseXmlFromLocal(new File(Environment.getExternalStorageDirectory(),"persons.xml"));
        System.out.println("persons的size--->");
        for(Person person : persons){
            System.out.println(person.toString());;
        }
}





    /**
     * 自己創建一個Person集合,用於測試寫到本地
     * @return
     */
    public List<Person> getPersonList(){
        List<Person> persons = new ArrayList<Person>();
        for(int i=0; i<20; i++){
            Person person = new Person();
            person.setId(i);
            person.setAge(18+i);
            person.setName("baby"+i);
            persons.add(person);
        }

        return persons;
    }

    /**
     * 把Person集合寫到本地的xml文件中
     * @param persons
     * @throws IOException 
     * @throws IllegalStateException 
     * @throws IllegalArgumentException 
     */
    public void writeToLocal(List<Person> persons) throws IllegalArgumentException, IllegalStateException, IOException {
        BufferedOutputStream bos = 
                new BufferedOutputStream(new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"persons.xml")));
        System.out.println(Environment.getExternalStorageDirectory());
//      StringBuilder sb = new StringBuilder();
        XmlSerializer serializer = Xml.newSerializer();
        serializer.setOutput(bos, "UTF-8");

        serializer.startDocument("UTF-8", true);
        serializer.startTag(null, "persons");

        for(Person person : persons){
            serializer.startTag(null, "person");

            serializer.attribute(null, "id",String.valueOf(person.getId()) );

            serializer.startTag(null, "name");
            serializer.text(person.getName());
            serializer.endTag(null, "name");

            serializer.startTag(null, "age");
            serializer.text(String.valueOf(person.getAge()));
            serializer.endTag(null, "age");

            serializer.endTag(null, "person");
        }

        serializer.endTag(null, "persons");
        serializer.endDocument();
        bos.close();
    }

    public List<Person> parseXmlFromLocal(File xmlFile){
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(xmlFile));

            XmlPullParser pullParser = Xml.newPullParser();
            pullParser.setInput(bis, "utf-8");


            int eventType  = pullParser.getEventType();
            List<Person> persons = null;
            Person person = null;
            System.out.println("1111111");
            while(eventType != XmlPullParser.END_DOCUMENT){

                switch (eventType) {
                case XmlPullParser.START_TAG:

                    if(pullParser.getName().equals("persons")){
                        persons = new ArrayList<Person>();
                    }else if(pullParser.getName().equals("person")){
                        person = new Person();
                        person.setId(Integer.valueOf(pullParser.getAttributeValue(null, "id")));
                    }else if(pullParser.getName().equals("name")){
                        person.setName(pullParser.nextText());
                    }else if(pullParser.getName().equals("age")){
                        person.setAge(Integer.valueOf(pullParser.nextText()));
                    }

                    break;

                case XmlPullParser.END_TAG:
                    if(pullParser.getName().equals("person")){
                        System.out.println("33333333333");
                        persons.add(person);
                    }
                    break;
                default:
                    break;
                }
                pullParser.next();
            }
            return persons;
        } catch (Exception e) {
            System.out.println("發生錯誤");
        }

//      bis.close();
        return null;
    }

}

class Person{
    private int id;
    private String name;
    private int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章