標籤:android pull xml 解析
首先
準備一個供解析的xml檔案,這裡我們假定要解析的檔案名稱為person.xml,檔案的具體內容為:
<?xml version="1.0" encoding="utf-8"?><persons> <person id="23"> <name>liming</name> <age>23</age> </person></persons>
接下來寫一個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<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; }}
接下來
就可以寫測試類別對其進行測試了:
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<Person> persons = PersonService.getPersons(in); for(Person per:persons){ Log.i(TAG, per.toString()); } }}
在測試之前
要在項目資訊清單檔中引入測試環境:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><application>.....<uses-library android:name="android.test.runner" /><!--注意放置的位置-->....</application>....<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.yangzi.xml" /><!--注意放置的位置--></manifest>
ok,點擊testPersons方法,運行為Android Junit Test試試吧!
體會
根據業務類PersonService 的分析代碼,可以看出,在xml檔案中的並沒有進行操作,可以任意命名,也就是說,在解析xml檔案時可以直接提取自己想要的就行了,其他的不用操作。
自己的想法,不知道對否,請大神指正啊!
Android中Pull解析器解析xml檔案案例