android pull解析XML文件

package com.example.pullxml;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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.os.Environment;
import android.test.AndroidTestCase;
import android.util.Log;
import android.util.Xml;

public class PullXml extends AndroidTestCase{
	public void test() {
		writeXML();
		List<Person> personList = parserXML();
		for (Person person : personList) {
			Log.i("id", String.valueOf(person.getId()));
			Log.i("name", person.getName());
			Log.i("age", String.valueOf(person.getAge()));
		}
	}

	public void writeXML() {
		// 获得序列化对象
		XmlSerializer serializer = Xml.newSerializer();
		List<Person> personList = getPersonList();
		try {
			File sdDir = Environment.getExternalStorageDirectory();
			File file = new File(sdDir, "persons.xml");
			FileOutputStream fos = new FileOutputStream(file);
			// 指定输出位置和编码
			serializer.setOutput(fos, "utf-8");
			serializer.startDocument("utf-8", true);// <?xml version='1.0'
													// encoding='utf-8'
													// standalone='true' ?>
			serializer.startTag(null, "persons");// <persons>
			for (Person person : personList) {
				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(String.valueOf(person.getAge()));
				serializer.endTag(null, "age");

				serializer.endTag(null, "person");
			}
			serializer.endTag(null, "persons");// </persons>
			serializer.endDocument();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public List<Person> parserXML() {
		List<Person> personList = null;
		Person person = null;
		Long id = null;
		// 获得pull解析对象
		XmlPullParser parser = Xml.newPullParser();
		try {
			File sdDir = Environment.getExternalStorageDirectory();
			File file = new File(sdDir, "persons.xml");
			FileInputStream fis = new FileInputStream(file);
			parser.setInput(fis, "utf-8");
			// 获得事件类型
			int eventType = parser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {
				String tagName = parser.getName();// 获得当前节点名称
				switch (eventType) {
				case XmlPullParser.START_TAG:
					if ("persons".equals(tagName)) {
						personList = new ArrayList<Person>();
					} else if ("person".equals(tagName)) {
						person = new Person();
						id = Long.parseLong(parser
								.getAttributeValue(null, "id"));
						person.setId(id);
					} else if ("name".equals(tagName)) {
						person.setName(parser.nextText());
					} else if ("age".equals(tagName)) {
						person.setAge(Integer.parseInt(parser.nextText()));
					}
					break;
				case XmlPullParser.END_TAG:
					if("person".equals(tagName)){
						personList.add(person);
					}
					break;

				}
				eventType=parser.next();

			}

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return personList;
	}

	public List<Person> getPersonList() {
		List<Person> personList = new ArrayList<Person>();
		for (int i = 0; i < 10; i++) {
			Person person = new Person((long) i, "liang" + i, i);
			personList.add(person);
		}
		return personList;
	}
}

class Person {
	private Long id;
	private String name;
	private Integer age;

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

	public Person() {
		super();
	}

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

	public Long getId() {
		return id;
	}

	public void setId(Long 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;
	}

}

时间: 2024-10-20 07:39:48

android pull解析XML文件的相关文章

Android中pull解析XML文件的简单使用

首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐的解析方式 看代码: XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>孙洋洋</name

android 通过pull解析xml文件

1 package com.example.xmldemo.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStreamReader; 9 import java.

Android——PULL解析XML

简介 Android中常常使用XML文件保存用户的APP设置信息.因此需要对XML文件的相关操作进行了解.本文将以<学生信息管理系统>为案例背景进行介绍相关的XML解析的介绍,以及其他相关知识的阐述. 需求: 在一个Activity中可以动态添加一个学生信息并保存到XML文件. 同时,还可以查看当前的所有学生信息. 相关技术: 线性布局 设置onClick()事件响应函数 添加一个TextView以显示添加的学生信息 清空所有的子元素(列表中所有的学生信息的TextView) PULL创建XM

android pull 解析xml方式

先获取到一个XmlPullParserFactory实例 通过实例得到XmlPullParser对象 调用XmlPullParser的setInput()方法将服务返回的XML数据设置进去开始解析 通过getEventType()可以得到当前的解析事件 While循环不断地进行解析 如果当前的解析事件不等于XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用next()方法后可以获取下一个解析事件. 在while循环中,我们通过getName()方法得到当前结点的名字

使用XML序列化器生成XML文件和利用pull解析XML文件

首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message> <sms> <body> 陈驰0 </body> <date> 1462162910995 </date> <address> 1380 </address> <type> 1 </type> &

Android程序解析XML文件的方法及使用PULL解析XML案例

一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM 以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构

使用PULL解析XML文件

转载出处:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序.因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中. 但Xmlpull比Sax更简明,而且不需要扫描完整个流. 下面来看一个pull解析xml的例子: student.xml: 1 <?xml

pull 解析XML 文件

pull解析的特点 事件驱动机制来解析 当解析到一个节点,会自动停止,不会往下继续解析,好处 :很好能够控制流程 android默认采用pull解析 pull解析的事件类型 start_document :开始文档事件 ,事件类型 end_docuent :结束文档事件 start_tag: 开始标记 end_tag :结束标记 private List<Map<String, String>> getXmlFormPull(InputStream is) throws Excep

Android Pull解析XML

在上文中介绍了使用sax方式解析xml,这里介绍下在Android中极力推荐的xmlpull方式解析xml.xmlpull不仅仅可以使用在Android上,同样也适用于javase,但在javase环境下,你需要自己去获取xmlpull所依赖的类库.         环境: kxml2-2.3.0.jar xmlpull_1_1_3_4c.jar 以上两个jar分别从以下网站下载: http://www.xmlpull.org/    xmlpull http://kxml.sourceforg