Android初級教程:Android中解析方式之pull解析

來源:互聯網
上載者:User

標籤:

在安卓中有很多種解析方式。按照大方向有xml解析和json解析。而,細緻的分,xml和json解析各有自己的很多解析方式。今天這一篇主要介紹xml解析中的pull解析。對於xml的解析方式,我之前在javaweb一些知識中有寫過dom和dom4j等等解析方式。有興趣的讀者可以去javaweb篇裡面找相關的內容。

先自訂一個資料來源,假設就是訪問伺服器返回的xml資料檔案名稱為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>

針對此,建立一個javabean,以稍後儲存上邊的資料。每一個city就代表一個對象。這樣更符合物件導向的思想

在mainactivity中程式碼完成解析過程:

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;//伺服器向用戶端傳送資料。這些資料一般儲存在xml檔案中的。因此需要對資料進行解析、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類型的。InputStream is = getClassLoader().getResourceAsStream("weather.xml");//拿到pull解析器對象XmlPullParser是一個介面,不可以newXmlPullParser xp = Xml.newPullParser();//初始化try {xp.setInput(is, "utf-8");//初始化,設定檔案的位置流對象(解析目標檔案對象)和解析編碼格式//擷取當前節點的事件類型,因為pull解析是從xml檔案第一行前端節點往下解析的,“指標”往下移動,標籤(節點)不同,事件類型就不同。//通過事件類型的判斷,我們可以知道當前節點是什麼節點,從而確定我們應該做什麼操作int type = xp.getEventType();City city = null;while(type != XmlPullParser.END_DOCUMENT){//xp.END_DOCUMENT//根據節點的類型,要做不同的操作switch (type) {case XmlPullParser.START_TAG://擷取當前節點的名字if("weather".equals(xp.getName())){//建立city集合對象,用於存放city的javabeancityList = new ArrayList<City>();}else if("city".equals(xp.getName())){//建立city的javabean對象city = new City();}else if("name".equals(xp.getName())){//擷取當前節點的下一個節點的[文本]String name = xp.nextText();city.setName(name);}else if("temp".equals(xp.getName())){//擷取當前節點的下一個節點的文本String temp = xp.nextText();city.setTemp(temp);}else if("pm".equals(xp.getName())){//擷取當前節點的下一個節點的文本String pm = xp.nextText();city.setPm(pm);}break;case XmlPullParser.END_TAG:if("city".equals(xp.getName())){//把city的javabean放入集合中。三個城市city,解析完一個城市就把那個城市執行個體放到集合裡面去。cityList.add(city);}break;}//把指標移動到下一個節點,並返回該節點的事件類型type = xp.next();}for (City c : cityList) {System.out.println(c.toString());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
運行程式,解析結果如下:


Android初級教程:Android中解析方式之pull解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.