Android使用Pull解析和生成XML文件

来源:互联网 发布:大数据就业 知乎 编辑:程序博客网 时间:2024/05/18 12:44

Android使用Pull解析和生成XML文件

除了可以使用SAX和DOM解析XML文件之外,还可以使用Android内置的pull解析器解析xml文件。采用事件驱动,返回相应的数值代码。

一、首先是Pull解析xml文件

1. 以解析该xml文件为例:
<?xml version="1.0" encoding="UTF-8"?><persons>    <person id="23">        <name>大明</name>        <age>30</age>    </person>    <person id="20">        <name>小明</name>        <age>25</age>    </person></persons>
2.新建JavaBean,用于存放xml文件中的person数据:
public class Person {    private int id;    private String name;    private short age;    public Person() {        super();    }    public Person(int id, String name, short age) {        super();        this.id = id;        this.name = name;        this.age = 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 short getAge() {        return age;    }    public void setAge(short age) {        this.age = age;    }    @Override    public String toString() {        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";    }}
3.新建业务操作类:
public class PULLPersonService {    public static List<Person> getPersons(InputStream inputStream) throws Exception {        List<Person> persons = null;        Person person = null;        XmlPullParser parser = Xml.newPullParser();        parser.setInput(inputStream, "UTF-8");        int eventType = parser.getEventType(); //返回第一个事件数值代码        while(eventType != XmlPullParser.END_DOCUMENT) {            switch(eventType) {            case XmlPullParser.START_DOCUMENT:                persons = new ArrayList<Person>();                break;            case XmlPullParser.START_TAG:                String name = parser.getName();                if("person".equals(name)) {                    person = new Person();                    person.setId(new Integer(parser.getAttributeValue(0)));                }                if(person != null) {                    if("name".equals(name)) {                        person.setName(parser.nextText());                    } else if("age".equals(name)) {                        person.setAge(new Short(parser.nextText()));                    }                }                break;            case XmlPullParser.END_TAG:                if("person".equals(parser.getName())) {                    persons.add(person);                    person = null;                }                break;            default:                break;            }            eventType = parser.next();        }        return persons;    }}
4.新建单元测试类:
public class PersonServiceTest extends AndroidTestCase {    public void testPULLGetPersons() throws Exception {        InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.xml");        List<Person> persons = PULLPersonService.getPersons(inputStream);        for(Person person : persons) {            Log.i("PULL", person.toString());        }    }}

二、其次是Pull生成xml文件

1. 使用OutputStream生成xml文件:
public static void save(List<Person> persons, OutputStream outputStream) throws Exception {        XmlSerializer serializer = Xml.newSerializer();        serializer.setOutput(outputStream, "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();        outputStream.flush();        outputStream.close();    }
2.新建单元测试方法:
public void testSave() throws Exception {        List<Person> persons = new ArrayList<Person>();        persons.add(new Person(001, "haha", (short)12));        persons.add(new Person(002, "你好", (short)23));        persons.add(new Person(003, "欧巴", (short)34));        File file = new File(this.getContext().getFilesDir(), "person.xml");        FileOutputStream outputStream = new FileOutputStream(file);        PULLPersonService.save(persons, outputStream);    }
3. 使用Writer生成xml文件:
public static void save(List<Person> persons, Writer writer) throws Exception {        XmlSerializer serializer = Xml.newSerializer();        serializer.setOutput(writer);        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();        writer.flush();        writer.close();    }
4.新建单元测试方法:
public void testSave() throws Exception {        List<Person> persons = new ArrayList<Person>();        persons.add(new Person(001, "haha", (short)12));        persons.add(new Person(002, "你好", (short)23));        persons.add(new Person(003, "欧巴", (short)34));        File file = new File(this.getContext().getFilesDir(), "ppp.xml");        FileOutputStream outputStream = new FileOutputStream(file);        OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");        BufferedWriter bwriter = new BufferedWriter(writer);//缓存        PULLPersonService.save(persons, bwriter);    }
0 0
原创粉丝点击