Android初级教程:Android中解析方式之pull解析
生活随笔
收集整理的這篇文章主要介紹了
Android初级教程:Android中解析方式之pull解析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在安卓中有很多種解析方式。按照大方向有xml解析和json解析。而,細(xì)致的分,xml和json解析各有自己的很多解析方式。今天這一篇主要介紹xml解析中的pull解析。對(duì)于xml的解析方式,我之前在javaweb一些知識(shí)中有寫(xiě)過(guò)dom和dom4j等等解析方式。有興趣的讀者可以去javaweb篇里面找相關(guān)的內(nèi)容。
先自定義一個(gè)數(shù)據(jù)源,假設(shè)就是訪問(wèn)服務(wù)器返回的xml數(shù)據(jù)文件名稱(chēng)為weather.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <weather><city><name>北京</name><temp>5°</temp><pm>80</pm></city><city><name>西安</name><temp>-5°</temp><pm>800</pm></city><city><name>南京</name><temp>12°</temp><pm>60</pm></city> </weather>針對(duì)此,建立一個(gè)javabean,以稍后保存上邊的數(shù)據(jù)。每一個(gè)city就代表一個(gè)對(duì)象。這樣更符合面向?qū)ο蟮乃枷?br />
在mainactivity中代碼完成解析過(guò)程:
package com.itydl.pullparser;import java.io.InputStream; import java.util.ArrayList; import java.util.List;import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException;import com.itheima.pullparser.domain.City;import android.os.Bundle; import android.app.Activity; import android.util.Xml; import android.view.Menu; import android.view.View;//服務(wù)器向客戶(hù)端傳送數(shù)據(jù)。這些數(shù)據(jù)一般保存在xml文件中的。因此需要對(duì)數(shù)據(jù)進(jìn)行解析、 public class MainActivity extends Activity {List<City> cityList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View v){//獲取到src文件夾下的資源文件ClassLoader.getResourceAsStream.返回的是InputStream類(lèi)型的。InputStream is = getClassLoader().getResourceAsStream("weather.xml");//拿到pull解析器對(duì)象XmlPullParser是一個(gè)接口,不可以newXmlPullParser xp = Xml.newPullParser();//初始化try {xp.setInput(is, "utf-8");//初始化,設(shè)置文件的位置流對(duì)象(解析目標(biāo)文件對(duì)象)和解析編碼格式//獲取當(dāng)前節(jié)點(diǎn)的事件類(lèi)型,因?yàn)閜ull解析是從xml文件第一行頭節(jié)點(diǎn)往下解析的,“指針”往下移動(dòng),標(biāo)簽(節(jié)點(diǎn))不同,事件類(lèi)型就不同。//通過(guò)事件類(lèi)型的判斷,我們可以知道當(dāng)前節(jié)點(diǎn)是什么節(jié)點(diǎn),從而確定我們應(yīng)該做什么操作int type = xp.getEventType();City city = null;while(type != XmlPullParser.END_DOCUMENT){//xp.END_DOCUMENT//根據(jù)節(jié)點(diǎn)的類(lèi)型,要做不同的操作switch (type) {case XmlPullParser.START_TAG:// 獲取當(dāng)前節(jié)點(diǎn)的名字if("weather".equals(xp.getName())){//創(chuàng)建city集合對(duì)象,用于存放city的javabeancityList = new ArrayList<City>();}else if("city".equals(xp.getName())){//創(chuàng)建city的javabean對(duì)象city = new City();}else if("name".equals(xp.getName())){// 獲取當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的[文本]String name = xp.nextText();city.setName(name);}else if("temp".equals(xp.getName())){// 獲取當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的文本String temp = xp.nextText();city.setTemp(temp);}else if("pm".equals(xp.getName())){// 獲取當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的文本String pm = xp.nextText();city.setPm(pm);}break;case XmlPullParser.END_TAG:if("city".equals(xp.getName())){//把city的javabean放入集合中。三個(gè)城市city,解析完一個(gè)城市就把那個(gè)城市實(shí)例放到集合里面去。cityList.add(city);}break;}//把指針移動(dòng)到下一個(gè)節(jié)點(diǎn),并返回該節(jié)點(diǎn)的事件類(lèi)型type = xp.next();}for (City c : cityList) {System.out.println(c.toString());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}} 運(yùn)行程序,解析結(jié)果如下:轉(zhuǎn)載于:https://www.cnblogs.com/wanghang/p/6299620.html
總結(jié)
以上是生活随笔為你收集整理的Android初级教程:Android中解析方式之pull解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦到父亲死了又复活了有什么兆头
- 下一篇: 无梦到徽州的上一句是什么意思