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

Android:Pull解析XML

編輯:關於Android編程

在上一篇文章寫了SAX解析XML,感覺Pull方式和SAX方式非常相似,只是SAX需要一個輔助的類,解析時觸發事件後在回調方法裡面寫代碼,而Pull則通過調用事件類型的方法來返回一個int值,然後根據這個值來寫代碼。

首先自定義一個XML文件:Student.xml,注意是新建file而不是xml。

  
  
      
        張三  
          
        18  
      
      
        李四  
          
        19  
      
      
        王五  
          
        20  
      
  

以解析第一項數據為例:

  
      
        張三  
          
        18  
      



整個流程是:int event = parser.getEventType()產生一個XmlPullParser.START_DOCUMENT:實例化List  →  event = parser.next()觸發下一個事件,產生XmlPullParser.START_TAG,元素名為student,實例化student,將元素屬性賦給相應字段  →    event
 = parser.next()觸發下一個事件,產生XmlPullParser.START_TAG,元素名為name,將文本信息賦給相應字段  →  event = parser.next()觸發下一個事件,產生XmlPullParser.END_TAG,沒做什麼反應
  →  ......  →  最後是XmlPullParser.END_TAG,元素名為student,將student這個對象存放在list中,將其置為null。

最後在activity裡面通過一個Button來解析數據,其中用到幾個類。

package com.example.xml_sax_demo_1;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				try {
					readXML();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
	}

	private void readXML() throws Exception {
		Student student = null;List list = null;
		XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
		XmlPullParser parser = xmlPullParserFactory.newPullParser();    //實例化XmlPullParser
		InputStream stream = this.getClass().getClassLoader()
				.getResourceAsStream("Student.xml"); // 獲得輸入流
		parser.setInput(stream, "UTF-8");                    //兩個參數輸入流,編碼格式
		int event = parser.getEventType();// 產生第一個事件
		while (event != XmlPullParser.END_DOCUMENT) {
			switch (event) {
			case XmlPullParser.START_DOCUMENT:     
				list = new ArrayList();   //文檔開始實例化list
				break;

			case XmlPullParser.START_TAG:                 
				if ("student".equals(parser.getName())) {
					student = new Student();
					student.setId(Integer.parseInt(parser.getAttributeValue(0)));
				}
				if (student != null) {
					if ("name".equals(parser.getName())) {
						student.setName(parser.nextText());
					} else if ("sex".equals(parser.getName())) {
						student.setSex(parser.nextText());
					} else if ("age".equals(parser.getName())) {
						student.setAge(Integer.parseInt(parser.nextText()));
					}
				}
				break;
			case XmlPullParser.END_TAG:
				if ("student".equals(parser.getName())) {
					list.add(student);
					student = null;
				}
				break;
			}
			event = parser.next();// 進入下一個元素並觸發相應事件
		}
		for (Student stu : list) {
			System.out.println(stu.toString());
		}
	}
}

結果:


小結:XmlPullParser類幾個比較重要的常量:START_DOCUMENT、END_DOCUMENT、START_TAG、END_TAG,其實還有一個Text。幾個重要的方法getName(),獲取元素名;nextText(),獲取下一個文本信息;next(),讀取下一個解析狀態。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved