Android內(nèi)部采用Pull解析器對(duì)XML進(jìn)行解析。
成都創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站設(shè)計(jì)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站設(shè)計(jì)及推廣,對(duì)戶外休閑椅等多個(gè)領(lǐng)域擁有多年的網(wǎng)站制作經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
Pull解析器解析原理:
讀取XML數(shù)據(jù)到字符數(shù)組中;
開始解析——挨個(gè)字符讀取XML文件,判斷是否符合XMl語法,如符合,則會(huì)觸發(fā)對(duì)應(yīng)的事件。
下面通過一個(gè)例子來說明。
比如要解析如下XML文件
gaohao 25 gaofeng 31
在domain層新建Person類,存放從XML解析出來的數(shù)據(jù)
public class Person { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
在業(yè)務(wù)層新建PersonService類,解析XML文件
public class PersonService { public static ListgetPersons(InputStream xml) throws Exception{ List persons = null; Person person = null; //使用Pull解析XML文件 //XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();//得到Pull解析器 XmlPullParser pullParser =Xml.newPullParser();//也可以用該方法創(chuàng)建解析器 pullParser.setInput(xml, "UTF-8");//設(shè)置Pull解析器要解析的數(shù)據(jù) //產(chǎn)生事件 int event = pullParser.getEventType(); //對(duì)事件進(jìn)行判斷 while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT://文檔開始 persons = new ArrayList ();//存放解析數(shù)據(jù)數(shù)組的初始化 break; case XmlPullParser.START_TAG: if("person".equals(pullParser.getName())){ int id = new Integer(pullParser.getAttributeValue(0)); person = new Person(); person.setId(id); } if("name".equals(pullParser.getName())){ String name = pullParser.nextText();//得到后面的文本 person.setName(name); } if("age".equals(pullParser.getName())){ int age = new Integer(pullParser.nextText());//得到后面的文本 person.setAge(age); } break; case XmlPullParser.END_TAG: if ("person".equals(pullParser.getName())) { persons.add(person); person = null; } break; } //解析完第一個(gè)字符,會(huì)停止解析,要讓其繼續(xù),需要調(diào)用如下方法 event = pullParser.next();//進(jìn)入到后面的節(jié)點(diǎn),觸發(fā)case XmlPullParser.START_TAG事件,利用循環(huán)解析 } return persons; } }
通過以上步驟即可將XML文件中的數(shù)據(jù)解析出來,通過單元測(cè)試顯示解析出來的數(shù)據(jù)
在AndroidManifest.xml文件中引入單元測(cè)試環(huán)境
新建一個(gè)單元測(cè)試方法
public class PersonServiceTest extends AndroidTestCase { private static final String TAG = "PersonServiceTest"; public void testPersons() throws Exception{ InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml"); Listpersons= PersonService.getPersons(xml); for (Person person : persons) { Log.i(TAG, person.toString()); } } }
執(zhí)行該測(cè)試方法就會(huì)在LogCat控制臺(tái)打印如下信息
03-28 06:13:45.375: INFO/PersonServiceTest(1247): Person [id=10, name=gaohao, age=25] 03-28 06:13:45.375: INFO/PersonServiceTest(1247): Person [id=11, name=gaofeng, age=31]
通過以上方法即可實(shí)現(xiàn)對(duì)XML文件中數(shù)據(jù)的解析。