Android写入xml文件案例

来源:互联网 发布:万国数据外资企业 编辑:程序博客网 时间:2024/05/22 11:46

说明:该文章所写的案例和博文 《Android中Pull解析器解析xml文件案例》使用同一个工程测试;

首先

给出一个想要输出xml文件示例:

<?xml version="1.0" encoding="utf-8"?><persons>    <person id="23">        <name>liming</name>        <age>23</age>    </person></persons>

然后

编写业务类:

package com.yangzi.service;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;import android.util.Xml;import com.yangzi.domain.Person;public class PersonService {    /*     * 解析xml文件     * @param xml xml文件数据流     * @return xml文件里的内容集合     * @throws Exception     * */    public static List<Person> getPersons(InputStream xml) throws Exception {        List<Person> persons = null;        Person person = null;        //得到xmlpull解析器        XmlPullParser pullParser = Xml.newPullParser();        //設置解析器要解析的内容,和编码方式        pullParser.setInput(xml,"utf-8");        //循环读取xml文件的节点        int event = pullParser.getEventType();//得到xml文件中的一个节点        while(event != XmlPullParser.END_DOCUMENT){            switch (event) {            //xml文件开始节点,开始节点一般做数据的初始化            case XmlPullParser.START_DOCUMENT:                persons = new ArrayList<Person>();                break;            //若为开始节点            case XmlPullParser.START_TAG:                //若为person节点                if("person".equals(pullParser.getName())){                    //得到id                    person = new Person();                    //int id = Integer.parseInt(pullParser.getAttributeValue(0));                    //int id = new Integer(pullParser.getAttributeValue(0));                    int id = Integer.valueOf(pullParser.getAttributeValue(0));                    person.setId(id);                }                //若为名字节点                if("name".equals(pullParser.getName())){                    String name = pullParser.nextText();                    person.setName(name);                }                //若为年龄节点                if("age".equals(pullParser.getName())){                    //int age = Integer.parseInt(pullParser.nextText());                    //int age = new Integer(pullParser.nextText());                    int age = Integer.valueOf(pullParser.nextText());                    person.setAge(age);                }                break;            case XmlPullParser.END_TAG:                if("person".equals(pullParser.getName())){                    persons.add(person);                    person = null;                }                break;            }            event = pullParser.next();//读取下一个节点        }        return persons;    }    /*     * 保存至xml文件     * @param out 输出方向     * @param persons 数据     * @throws Exception     * */    public void save(OutputStream out,List<Person> persons) throws Exception{        XmlSerializer serializer = Xml.newSerializer();//获得反序列化对象        serializer.setOutput(out, "utf-8");//设置输出流及编码方式        serializer.startDocument("utf-8", true);//设置xml文件startDocument,同样,后面有对应的endDocument        serializer.startTag(null, "persons");//开始节点        for(Person person:persons){            serializer.startTag(null, "person");//开始节点            serializer.attribute(null, "id",person.getId()+"");//设置开始节点属性值            //一个新的节点            serializer.startTag(null, "name");            serializer.text(person.getName());            serializer.endTag(null, "name");            //一个新的节点            serializer.startTag(null, "age");            serializer.text(person.getAge()+"");            serializer.endTag(null, "age");            serializer.endTag(null, "persons");//结束节点        }        serializer.endTag(null, "persons");//结束节点        serializer.endDocument();//对应startDocument        out.flush();//刷新流        out.close();//关闭流    }}

接着

测试一下,测试类的编写:

package com.yangzi.test;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.List;import android.test.AndroidTestCase;import android.util.Log;import com.yangzi.domain.Person;import com.yangzi.service.PersonService;public class PersonServiceTest extends AndroidTestCase {    private static final String TAG = "PersonServiceTest";    public static List<Person> persons = null;    public void testPersons() throws Exception{        InputStream in = this.getClass().getClassLoader().getResourceAsStream("person.xml");        persons = PersonService.getPersons(in);        for(Person per:persons){            Log.i(TAG, per.toString());        }    }    /**/    public void testSave()throws Exception{        //调用测试testPersons方法得到persons        testPersons();        //得到该APP的包        String path = getContext().getFilesDir().toString();        //new 新文件        File xmlFile = new File(path,"xxx.xml");        //文件操作流        FileOutputStream out = new FileOutputStream(xmlFile);        PersonService.save(out, persons);    }}

OK,到此结束啦!

0 0
原创粉丝点击