Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之PULL解析XML

Android之PULL解析XML

編輯:關於Android編程

今天我們一起通過一個小例子來學習一下使用PULL解析器解析XML文件。

(1)首先我們放一個文件名為beauties.xml的XML文件到assets目錄下,文件內容如下:

  
  
      
        范冰冰  
        28  
      
      
        楊冪  
        23  
      
  
  

然後在src目錄下寫一個與XML中節點(Node)相對應的類Beauty,其內容如下:

package com.pulltest;

public class Beauty {
	
	//美女姓名
	private String name;
	//美女年齡
	private String age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "美女資料 [年齡=" + age + ", 姓名=" + name + "]";
	}
}

(2)在src目錄下寫一個接口IBeautyParser,其內容如下:

package com.pulltest;

import java.io.InputStream;
import java.util.List;

public interface IBeautyParser {
	/**
	 * 
	 * 解析輸入流,獲取Beauty列表
	 * @param is
	 * @return
	 * @throws Exception
	 */
	public List parse(InputStream is) throws Exception;
	
	/**
	 * 
	 * 序列化Beauty對象集合,得到XML形式的字符串
	 * @param beauties
	 * @return
	 * @throws Exception
	 */
	public String serialize(List beauties) throws Exception;


}

在src目錄下寫一個上面接口的實現類BeautyParserImpl,其內容如下,代碼已經詳細注釋:

package com.pulltest;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

public class BeautyParserImpl implements IBeautyParser{

	@Override
	public List parse(InputStream is) throws Exception {
		List mList = null;
		Beauty beauty = null;
		
		// 由android.util.Xml創建一個XmlPullParser實例
		XmlPullParser xpp = Xml.newPullParser();
		// 設置輸入流 並指明編碼方式
		xpp.setInput(is,"UTF-8");
		// 產生第一個事件
		int eventType = xpp.getEventType();
		
		while (eventType != XmlPullParser.END_DOCUMENT){
			 switch (eventType) {
			             // 判斷當前事件是否為文檔開始事件
			             case XmlPullParser.START_DOCUMENT:
			                 mList = new ArrayList(); // 初始化books集合
			                 break;
			             // 判斷當前事件是否為標簽元素開始事件
			             case XmlPullParser.START_TAG:
			                 if (xpp.getName().equals("beauty")) { // 判斷開始標簽元素是否是book
			                     beauty = new Beauty();
			                 } else if (xpp.getName().equals("name")) {
			                     eventType = xpp.next();//讓解析器指向name屬性的值
			                     // 得到name標簽的屬性值,並設置beauty的name
			                     beauty.setName(xpp.getText());
			                 } else if (xpp.getName().equals("age")) { // 判斷開始標簽元素是否是book
			                     eventType = xpp.next();//讓解析器指向age屬性的值
			                     // 得到age標簽的屬性值,並設置beauty的age
			                     beauty.setAge(xpp.getText());
			                 } 
			                 break;
			  
			             // 判斷當前事件是否為標簽元素結束事件
			             case XmlPullParser.END_TAG:
			                 if (xpp.getName().equals("beauty")) { // 判斷結束標簽元素是否是book
			                     mList.add(beauty); // 將book添加到books集合
			                     beauty = null;
			                 }
			                 break;
			             }
			             // 進入下一個元素並觸發相應事件
			             eventType = xpp.next();
			         }
			         return mList;

		}


	@Override
	public String serialize(List beauties) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

}

(3) 在layout目錄下新建一個布局文件pulltest.xml,其內容如下:




    


在src目錄下的Activity內容如下:

package com.pulltest;
import java.io.InputStream;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import com.example.pulltest.R;


public class PullTestActivity extends Activity{
	
	//裝載Beauty類型的鏈表,其內容由XML文件解析得到
	private List beautyList;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pulltest);
		
		try {
			//通過assertmanager的open方法獲取到beauties.xml文件的輸入流
			InputStream is = this.getAssets().open("beauties.xml");
			//初始化自定義的實現類BeautyParserImpl
			BeautyParserImpl pbp = new BeautyParserImpl();
			//調用pbp的parse()方法,將輸入流傳進去解析,返回的鏈表結果賦給beautyList
			beautyList = pbp.parse(is);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		setupViews();
	}
	
	/**
	 * 將數據顯示到手機界面上
	 */
	private void setupViews(){
		String result = "";
		
		for (Beauty b : beautyList) {  
            result += b.toString();  
        }  

        TextView textView = (TextView) findViewById(R.id.textView);  
        textView.setText(result); 
	}

}

我們右鍵運行一下android project,結果截圖如下:

n塊ズ楗╧yAndroid之PULL解析XML

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