天天看點

在Android應用中使用Pull解析XML檔案(傳智播客視訊筆記)

Service.java源碼:

package .sinaapp.ssun.service;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.*;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserFactory;

import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import .sinaapp.ssun.domain.Person;

public class Service {

/**

 * 擷取XML檔案中的資料

 * @param xml

 * @return

 * @throws Exception

 */

public static List<Person> getPersons(InputStream xml) throws Exception {

 List<Person> persons = null;

 XmlPullParser parser = XmlPullParserFactory.newInstance()

   .newPullParser();

 // parser = Xml.newPullParser();

 parser.setInput(xml, "UTF-8");

 int event = parser.getEventType();

 Person p = null;

 while (event != XmlPullParser.END_DOCUMENT) {

  switch (event) {

  case XmlPullParser.START_DOCUMENT:

   persons = new ArrayList<Person>();

   break;

  case XmlPullParser.START_TAG:

   if("person".equals(parser.getName())){

    p = new Person();

    int id = Integer.parseInt(parser.getAttributeValue(0));

    p.setId(id);

   }

   if("name".equals(parser.getName())){

    String name = parser.nextText();

    p.setName(name);

   if("age".equals(parser.getName())){

    int age = Integer.parseInt(parser.nextText());

    p.setAge(age);

  case XmlPullParser.END_TAG:

    persons.add(p);

    p = null;

  }

  event = parser.next();

 }

 return persons;

}

 * 儲存資料到XML檔案中

 * @param persons

 * @param out

public static void save(List<Person> persons , OutputStream out) throws Exception{

 XmlSerializer serializer  =  Xml.newSerializer();

 serializer.setOutput(out, "UTF-8");

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

 serializer.startTag(null, "persons");

 for(Person p: persons){

  serializer.startTag(null, "person");

  serializer.attribute(null, "person", p.getId()+"");

  serializer.startTag(null, "name");

  serializer.text(p.getName());

  serializer.endTag(null, "name");

  serializer.startTag(null, "age");

  serializer.text(p.getAge()+"");

  serializer.endTag(null, "age");

  serializer.endTag(null, "person");

 serializer.endTag(null, "persons");

 serializer.endDocument();

 out.flush();

 out.close();

}

Person.java源碼:

package .sinaapp.ssun.domain;

public class Person {

private String name;

private int age;

private int 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;

public int getId() {

 return id;

public void setId(int id) {

 this.id = id;

public Person(String name, int age, int id) {

public Person() {

 super();

@Override

public String toString() {

 return "Person [name=" + name + ", age=" + age + ", id=" + id + "]";

text.xml檔案:

<!--test.xml-->

<?xml version="1.0" encoding="UTF-8"?><!-- 開始文檔文法 -->

<persons>

    <person  id="1">

        <name>ssun</name>

        <age>19</age>

    </person>

    <person  id="2">

        <name>cobe</name>

        <age>24</age>

</persons>單元測試TestService.java源碼:

package .sinaapp.ssun.test;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.List;

import android.test.AndroidTestCase;

import android.util.Log;

import .sinaapp.ssun.service.Service;

public class TestService extends AndroidTestCase {

private final String Tag = "Test";

public void testPersons() throws Exception{

 List<Person> persons = Service.getPersons(this.getClass().getClassLoader().getResourceAsStream("test.xml"));

 for(Person p : persons){

  Log.i(Tag, p.toString());

public void testSave() throws Exception{

 List<Person> persons = new ArrayList<Person>();

 persons.add(new Person("",19,23));

 persons.add(new Person("hhh",19,3));

 persons.add(new Person("qqq",19,24));  

 persons.add(new Person("ooo",19,25));

 File file = new File(this.getContext().getFilesDir(),"test2.xml");

 FileOutputStream out = new FileOutputStream(file);

 Service.save(persons, out);