Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android初級教程:Android中解析方式之pull解析

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

編輯:關於Android編程

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

先自定義一個數據源,假設就是訪問服務器返回的xml數據文件名稱為weather.xml:

 



	
		北京
		
		80
	
	
		西安
		-5°
		800
	
	
		南京
		12°
		60
	

 

針對此,建立一個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 cityList;
	@Override
	protected 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是一個接口,不可以new
		XmlPullParser 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的javabean
						cityList = new ArrayList();
					}
					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 block
			e.printStackTrace();
		}
	}

}
運行程序,解析結果如下:

\

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