`

android解析XML文件的三方法之Pull(读写)

 
阅读更多

     除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
1:

package cn.itcast.service;

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

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

import android.util.Xml;

import cn.itcast.domain.Person;
/**
 * 采用Pull解析XML内容
 */
public class PULLPersonService {
	
	public static void save(List<Person> persons, Writer writer) throws Throwable{
		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(writer);
		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();
		writer.flush();
		writer.close();
	}

	public static List<Person> getPersons(InputStream inStream) throws Throwable{
		List<Person> persons = null;
		Person person = null;
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(inStream, "UTF-8");
		int eventType = parser.getEventType();//产生第一个事件
		while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				persons = new ArrayList<Person>();
				break;
	
			case XmlPullParser.START_TAG:
				String name = parser.getName();//获取解析器当前指向的元素的名称
				if("person".equals(name)){
					person = new Person();
					person.setId(new Integer(parser.getAttributeValue(0)));
				}
				if(person!=null){
					if("name".equals(name)){
						person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
					}
					if("age".equals(name)){
						person.setAge(new Short(parser.nextText()));
					}
				}
				break;
				
			case XmlPullParser.END_TAG:
				if("person".equals(parser.getName())){
					persons.add(person);
					person = null;
				}
				break;
			}
			eventType = parser.next();
		}
		return persons;
	}
}

 2:测试Pull解析XML文件及保存XML文件

public void testPullGetPersons() throws Throwable{
		InputStream inStream = getClass().getClassLoader().getResourceAsStream("itcast.xml");
		List<Person> persons = PULLPersonService.getPersons(inStream);
		for(Person person : persons){
			Log.i(TAG, person.toString());
		}
	}
	
	public void testSave() throws Throwable{
		//File file = new File(this.getContext().getFilesDir(), "person.xml");
		//FileOutputStream outStream = new FileOutputStream(file);
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person(34, "lili", (short)12));
		persons.add(new Person(56, "老毕", (short)32));
		persons.add(new Person(39, "老张", (short)40));
		/*FileOutputStream outStream = this.getContext().openFileOutput("person.xml", Context.MODE_PRIVATE);
		OutputStreamWriter writer = new OutputStreamWriter(outStream, "UTF-8");
		BufferedWriter bWriter = new BufferedWriter(writer);
		*/
		StringWriter writer = new StringWriter();
		PULLPersonService.save(persons, writer);
		Log.i(TAG, writer.toString());
	}

  

 可参考:http://www.cnblogs.com/zhangdongzi/archive/2011/04/15/2016828.html

分享到:
评论
1 楼 xiaokang1582830 2012-06-06  
这代码能够正常运行吗?到处都是问题..

相关推荐

    android下解析xml文件的demo

    本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...

    android读写xml文件

    android中读写xml文件简单demo,可以通过此代码来简单的读取xml配置文件

    android Pull XML文件解析 存取 代码程序

    它的核心类是`org.xmlpull.v1.XmlPullParser`,它提供了一种迭代的方式解析XML,通过不断调用`next()`方法来获取下一个XML事件,如开始标签、结束标签、文本等。 三、Pull解析器的基本使用 1. 创建解析器:首先需要...

    android 解析XML文件代码

    本教程将深入讲解如何在Android中解析XML文件,帮助开发者更好地理解和运用这一核心技术。 首先,Android提供了两种主要的XML解析方式:DOM(Document Object Model)解析和SAX(Simple API for XML)解析。DOM解析...

    Android实现向本地写入一个XML文件和解析XML文件

    "Android实现向本地写入一个XML文件和解析XML文件" Android实现向本地写入一个XML文件和解析XML文件是Android开发中常见的需求,特别是在网络存储过程中,XML文件解析和使用XML保存一些信息变得非常重要。下面我们...

    Android解析XML使用WebView显示

    以上就是“Android解析XML并使用WebView显示”的主要技术点,开发者需要理解并掌握这些知识点,才能在实际项目中顺利实现这一功能。通过不断实践和学习,我们可以更好地理解和运用这些工具,提升应用的质量和用户...

    pull解析器解析XML工具类

    在Android开发中,由于其轻量级和低内存占用,Pull解析器常常被用来解析XML文档,尤其是在处理大数据量时,相比DOM和SAX解析器更为高效。 Pull解析器是一种事件驱动的解析方式,它不会一次性加载整个XML文档到内存...

    c,c++高手实现xml文件读写解析底层

    正确解析XML需要理解这些基本元素及其关系。 - **DTD(Document Type Definition)**:定义XML文档结构的规范,可用来验证文档是否符合规定格式。 - **XML Schema**:更现代的验证方式,提供了比DTD更强大的数据...

    android xml

    在第一部分,文章通过代码示例指导如何在Android工程中新建一个用于解析XML文件的工程,并且使用SAX解析方法。首先,创建了一个名为MainActivity的Activity类,该类继承自Android的Activity基类。在MainActivity的...

    android读写XML

    Android提供了多种解析XML的方法,包括DOM(Document Object Model)、SAX(Simple API for XML)和Pull三种方式。对于较小的文件,推荐使用DOM解析器;对于较大的文件或者需要逐行处理的情况,则建议使用SAX或Pull...

    android的xml操作

    1.4 解析XML 解析过程通常包含以下步骤: - `next()`: 使解析器移动到下一个事件。 - 检查当前事件类型:`START_DOCUMENT`, `END_DOCUMENT`, `START_TAG`, `END_TAG`, `TEXT`等。 - 处理事件:根据事件类型,读取...

    Android中xml解析

    XPP3是一个XML Pull解析器,提供了一个高效的XML解析机制,为XStream提供解析XML的基础。 以下是如何在Android中使用XStream的一个简要示例: 1. 添加依赖:首先,将XStream库文件添加到项目的lib目录,并在...

    安卓Android源码——比较通用的xml解析方法.zip

    本压缩包文件"安卓Android源码——比较通用的xml解析方法.zip"可能包含了一些关于如何在Android系统中解析XML的通用方法和技术。以下是关于Android XML解析的一些关键知识点: 1. **DOM解析**: - DOM(Document ...

    xml.rar_android_android sax_android sax xml_java xml_sax

    - 示例代码:创建一个SAX解析器实例,设置处理器,然后调用`parse()`方法解析XML文件。 4. DOM解析: - DOM解析将整个XML文档加载到内存中形成一棵树形结构,可以方便地通过节点遍历和操作。适合小规模、频繁读写...

    Android xml文件读取库

    Android系统提供了多种方式来读取和处理XML文件,包括DOM(Document Object Model)、SAX(Simple API for XML)和PullParser等方法。下面我们将详细探讨这些方法以及如何在Android应用中有效地使用XML读取库。 1. ...

    PullXML和Json

    XMLPullParser是Android SDK提供的一种解析XML的API,它可以顺序地读取XML文档,逐个处理开始标签、结束标签、文本等事件,这样可以有效地控制内存使用。 **Json读写解析** 方面,Android提供了Gson库,一个Java...

    Android_XML_Demo:Android解析XML格式数据的三种方法

    Android解析XML格式数据的三种方法 XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的...

    Android访问XML

    - 使用DOM解析器读取XML时,首先需要创建`DocumentBuilderFactory`实例,然后使用`newDocumentBuilder()`方法生成`DocumentBuilder`,接着调用`parse()`方法解析XML文件。 - 对于SAX解析,需要创建`XMLReader`,...

Global site tag (gtag.js) - Google Analytics