Xml解析

需求:①写一个xml文件到手机;②从手机读取一个xml文件并解析出数据

代码:

xml操作:

package com.suzi.xmldemo;

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

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

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

/**
* Created by Suzi on 2016/7/12.
*/
public class WriteXmlToPhone
{

    /**
    * 写一个xml文件到手机SD卡
    *
    * @param path
    */
    public void writeXmlTOPhone(File path)
    {
        List<Person> personList = getPersonList();
        XmlSerializer xmlSerializer = Xml.newSerializer();

        try
        {
            //            File path = new File(Environment.getExternalStorageDirectory(),
            // "persons.xml");
            FileOutputStream fos = new FileOutputStream(path);

            //设置输出位置和编码
            xmlSerializer.setOutput(fos, "utf-8");
            //正式写文件
            xmlSerializer.startDocument("utf-8", true);  //头文件,开始写

            xmlSerializer.startTag(null, "persons");

            for (Person person : personList)
            {
                xmlSerializer.startTag(null, "person");

                //写name
                xmlSerializer.startTag(null, "name");
                xmlSerializer.text(person.getName());
                xmlSerializer.endTag(null, "name");

                //写age
                xmlSerializer.startTag(null, "age");
                xmlSerializer.text(person.getAge());
                xmlSerializer.endTag(null, "age");

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

            xmlSerializer.endTag(null, "persons");

            xmlSerializer.endDocument();  //结束

        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
    * 从手机SD卡读取xml文件,解析其中的数据
    * @return List<Person>
    */
    public List<Person> readXmlFromPhone()
    {

        try
        {
            XmlPullParser parser = Xml.newPullParser();
            File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
            FileInputStream fis = new FileInputStream(path);
            List<Person> personList = null;
            Person person = null;
            String id;
            String tagName;

            //指定解析的文件和编码格式
            parser.setInput(fis, "utf-8");

            //获得事件的类型
            int eventType = parser.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT)
            {
                tagName = parser.getName();  //获得当前节点名称
                switch (eventType)
                {
                    case XmlPullParser.START_TAG:
                        if ("persons".equals(tagName))
                        {
                            //读取到<persons>节点时创建personList,接下来读取具体的对象就存入当中
                            personList = new ArrayList<Person>();
                        } else if ("person".equals(tagName))
                        {
                            //读取到<person>,创建person对象,用于接下来存放具体的值
                            person = new Person();
                        } else if ("name".equals(tagName))
                        {
                            //读取到<name>,存放到上面创建的person对象中
                            person.setName(parser.nextText());
                        } else if ("age".equals(tagName))
                        {
                            //读取到<age>.........
                            person.setAge(parser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if ("person".equals(tagName))
                        {
                            //读取到</person>,一个person读取完毕,将person对象存放到personList中
                            personList.add(person);
                        }
                        break;
                }

                eventType = parser.next();
            }
            return personList; // 如果没有异常,返回读取到的personList
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    public List<Person> getPersonList()
    {
        List<Person> personList = new ArrayList<Person>();

        for (int i = 0; i < 10; i++)
        {
            personList.add(new Person(String.valueOf("name_" + i), String.valueOf(i)));
        }

        return personList;
    }

}

Ps:加文件操作权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值