Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中Pull解析器解析xml文件案例

Android中Pull解析器解析xml文件案例

編輯:關於Android編程

首先

准備一個供解析的xml文件,這裡我們假定要解析的文件名稱為person.xml,文件的具體內容為:



    
        liming
        23
    

接下來寫一個person的JavaBean:

package com.yangzi.domain;
public class Person {
    private int id;
    private String name;
    private int 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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

然後

是業務類的編寫:

package com.yangzi.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import com.yangzi.domain.Person;

public class PersonService {

    public static List getPersons(InputStream xml) throws Exception {
        List 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();
                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;
    }
}

接下來

就可以寫測試類對其進行測試了:

package com.yangzi.test;

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 void testPersons() throws Exception{
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("person.xml");
        List persons = PersonService.getPersons(in);
        for(Person per:persons){
            Log.i(TAG, per.toString());
        }
    }
}

在測試之前

要在項目清單文件中引入測試環境:



.....

....

....

ok,點擊testPersons方法,運行為Android Junit Test試試吧!

體會

根據業務類PersonService 的分析代碼,可以看出,在xml文件中的並沒有進行操作,可以任意命名,也就是說,在解析xml文件時可以直接提取自己想要的就行了,其他的不用操作。
自己的想法,不知道對否,請大神指正啊!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved