Android写入xml文件案例

说明:该文章所写的案例和博文 《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,到此结束啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值