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

Android開發之XML解析PULL

編輯:關於Android編程

Android中解析xml是非常常用的操作,除了SAX和DOM兩種最常用的解析xml外,Android內置的Pull解析器解析XML文件。 在Android的源碼中大量的使用Pull解析,pull不僅更加的面相對象,而且使用速度和效率更高

Pull解析器是一個開源的java項目,既可以用於android,也可以用於JavaEE。如果用在javaEE需要把其jar文件放入類路徑中,因為Android已經集成進了Pull解析器,所以無需添加任何jar文件。android系統本身使用到的各種xml文件,其內部也是采用Pull解析器進行解析的。 Pull解析器的運行方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素並觸發相應事件。跟SAX不同的是, Pull解析器產生的事件是一個數字,而非方法,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型節點的值。

下面代碼演示如何使用Pull解析器:

如有一個person.xml



	
		liming
		30
	
	
		zhangxiaoxiao
		25
	

Person實體:

package com.andy.domain;

public class Person {

	private Integer id;
	private String name;
	private Integer age;

	public Person() {

	}

	public Person(Integer id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public Integer getAge() {
		return age;
	}

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

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}

完成讀寫person.xml的PersonService類

package com.andy.service;

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

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import com.andy.domain.Person;

public class PersonService {

	public static List getPersons(InputStream xml)
			throws XmlPullParserException, IOException {

		List persons = null;
		Person person = null;

		// XmlPullParser pullParser =
		// XmlPullParserFactory.newInstance().newPullParser();
		XmlPullParser pullParser = Xml.newPullParser();

		pullParser.setInput(xml, "UTF-8"); // 為xml設置要解析的xml數據

		int eventType = pullParser.getEventType();

		while (eventType != XmlPullParser.END_DOCUMENT) {
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:

				persons = new ArrayList();
				break;

			case XmlPullParser.START_TAG:
				if ("person".equals(pullParser.getName())) {
					int id = Integer.valueOf(pullParser.getAttributeValue(0));
					person = new Person();
					person.setId(id);
				}

				if ("name".equals(pullParser.getName())) {
					String name = pullParser.nextText();
					person.setName(name);

				}

				if ("age".equals(pullParser.getName())) {
					int age = Integer.valueOf(pullParser.nextText());
					person.setAge(age);
				}
				break;

			case XmlPullParser.END_TAG:
				if ("person".equals(pullParser.getName())) {
					persons.add(person);
					person = null;
				}
				break;

			}

			eventType = pullParser.next();

		}

		return persons;
	}

	public static void savePerson(List persons,
			OutputStream outputStream) throws IllegalArgumentException,
			IllegalStateException, IOException {

		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(outputStream, "UTF-8");

		serializer.startDocument("UTF-8", true);
		serializer.startTag(null, "persons");
		for (Person person : persons) {
			serializer.startTag(null, "person");
			serializer.attribute(null, "id", person.getId().toString());
			serializer.startTag(null, "name");

			serializer.text(person.getName());

			serializer.endTag(null, "name");

			serializer.startTag(null, "age");
			serializer.text(person.getAge().toString());
			serializer.endTag(null, "age");

			serializer.endTag(null, "person");
		}

		serializer.endTag(null, "persons");
		serializer.endDocument();
		
		outputStream.flush();
		outputStream.close();

	}

}


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