`
chinrui
  • 浏览: 97571 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

初涉Android之Pull解析XML文件

阅读更多

使用Pull解析XML文件

   一、大家都知道在XML文件中,主要是使用结点进行标识,其中主要分为两种结点,第一种是Element,也就是标签结点,第二种是Node,也就是文本结点。而使用Pull解析XML文件的时候,解析到一个结点,就会产生一个事件(Event),每个事件根据结点的类型也位置,产生不同的事件状态,我们要做的就是根据不同的事件状态进行不同的处理,即可完成对XML文件的解析工作。

 

解析时的事件状态主要分为以下几种:

  • START_DOCUMENT:文档开始,我们在这个状态下,主要做初始化工作
  • END_DOCUMENT:文档结束,解析完成,终止解析
  • START_TAG:标签开始,正式开始解析文件内容
  • END_TAG:标签结束,处理解析结果

 

public static List<Person> getPersons(InputStream xml) throws XmlPullParserException, NumberFormatException, IOException {
	List<Person> persons = null;
	
	// 获取XmlPullParser解析器
	XmlPullParser pullParser = Xml.newPullParser();
	pullParser.setInput(xml, "UTF-8");
	// 获取当前事件类型
	int eventType = pullParser.getEventType();
	Person person = null;
	
	// 文件件结束时终止循环
	while(eventType != pullParser.END_DOCUMENT) {
			switch(eventType) {
			case XmlPullParser.START_DOCUMENT :
				persons = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG :
				
				// getName():获取标签名
				if("person".equals(pullParser.getName())) {
					
					// getAttributeValue(index):获取标签属性
					Integer id = new Integer(pullParser.getAttributeValue(0));
					person = new Person();
					person.setId(id);
				} else if("name".equals(pullParser.getName())) {
					
					// nextText(): 获取标签中间的文本结点的内容
					String name = pullParser.nextText();
					person.setName(name);
				} else if("age".equals(pullParser.getName())) {
					Integer age = new Integer(pullParser.nextText());
					person.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG :
				if("person".equals(pullParser.getName())) {
					persons.add(person);
				}
				break;
		}
		// next():读取下一个结点
		eventType = pullParser.next();
	}
		
	return persons;
}

 二、将内存的信息保存为XML文件

     我们可以使用两种方法进行XML文件的保存,第一种是使用StringBuilder,进行拼写字符串,然后用输出流将其写入文件之中,比较简单但不推荐使用,第二种是使用XmlSerializer类进行文件的保存。

/**
 * 将List集合保存为XML格式
 * @param os 数据输出流
 * @param persons 数据存储的集合类
 * @throws IllegalArgumentException
 * @throws IllegalStateException
 * @throws IOException
 */
public static void save(OutputStream os , List<Person> persons) throws IllegalArgumentException, IllegalStateException, IOException {
	XmlSerializer serializer = Xml.newSerializer();
	serializer.setOutput(os, "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();
	os.flush();
	os.close();
}

 

 三、使用SharedPreferences进行参数的存储

    在SharedPreferences内部,同样使用的是XML格式对文件的参数进行存储的。所以在这儿,将其介绍一下,同时也推荐各位在应用参数设置的时候考虑使用SharedPreferences。

import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class FileService {
	
	SharedPreferences preferences = null;
	
	public FileService(Context context) {
		preferences = context.getSharedPreferences("richinfo", Context.MODE_PRIVATE);
	}
	
	/**
	 * 保存设定的参数
	 */
	public void save(String name , Integer age) {
		Editor editor = preferences.edit();
		editor.putString("name", name);
		editor.putInt("age", age);
		editor.commit();
	}
	
	/**
	 * 使用SharedPreferences读取文件参数
	 * @return Map<String, String> 返回参数集合
	 */
	public Map<String , String> readParameters() {
		Map<String , String> map = new HashMap<String , String>();
		map.put("name", preferences.getString("name", ""));
		map.put("age", String.valueOf(preferences.getInt("age", 0)));
		return map;
	}
}
分享到:
评论

相关推荐

    android之Pull解析XML文件

    总结,Android的Pull解析XML文件是一种高效、节省资源的解析方式,适用于网络通信中的数据交换。通过创建Pull解析器实例,监听XML事件,以及适当优化,开发者可以轻松处理XML数据,实现更流畅的用户体验。在实际开发...

    android xml pull解析示例

    在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...

    android使用pull 解析xml文件源码

    pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    Android中,使用SAX和PULL解析天气预报XML

    该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...

    Android之PULL解析XML文件——新浪微博客户端首页效果

    在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...

    android中使用PULL解析XML

    **使用PULL解析XML的步骤** 1. **引入库** 首先,在Android项目中,我们需要引入`xmlpull.org`的库,这个库已经被包含在Android SDK中,无需额外下载。在代码中,我们可以通过以下方式获取到PULL解析器: ```java ...

    pull解析xml文件

    pull解析xml文件

    android pull解析xml源码

    "Android pull解析xml源码"这个主题聚焦于使用Android的XML Pull解析器来理解和操作XML文档。Pull解析器是一种事件驱动的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要将整个...

    Android利用pull生成xml文件

    "Android利用Pull生成XML文件"这一主题涉及到的是如何使用Android的Pull解析器来读取和生成XML内容。Pull解析器是一种轻量级、低级别的解析机制,与DOM(文档对象模型)和SAX(简单API for XML)解析器相比,它更...

    Android之PULL解析XML

    "Android之PULL解析XML"是Android平台中处理XML数据的一种高效方式,它与SAX(Simple API for XML)类似,但更适合Android环境。PULL解析器在内存使用和性能方面进行了优化,适合于资源有限的移动设备。 PULL解析器...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    Android 封装pull解析xml

    以下是一些关于封装Pull解析XML的关键知识点: 1. **创建XMLPullParser实例**: Android系统提供了`XmlPullParserFactory`类,通过`newInstance()`方法创建XMLPullParser的工厂对象,然后使用`newPullParser()`...

    Pull解析xml源码导入即可用

    本文将深入探讨Android中的Pull解析XML技术,以及如何利用模板快速实现XML的解析。 首先,理解XML Pull解析器的工作原理是至关重要的。在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动...

    Android ReadXmlByPull 使用Pull解析Xml文件.rar

    在Android开发中,处理XML数据是一项常见的任务...通过创建解析器、设置输入源、处理事件以及异常处理,开发者可以轻松地读取和解析XML文件。在实际应用中,可以根据具体需求调整解析逻辑,以实现更复杂的XML数据处理。

    使用Pull解析xml文件

    XML(eXtensible Markup Language...总结,PULL解析器是Android开发中处理XML文件的一种高效手段,尤其适用于资源有限的移动环境。通过掌握其工作原理和使用方法,开发者可以更好地优化应用程序的性能,提高用户体验。

    Android PULL解析XML

    总结,本教程介绍了如何在Android中使用PULL解析XML,以及如何结合ButterKnife进行视图绑定。PULL解析提供了高效且内存友好的方式处理XML数据,而ButterKnife则简化了UI组件的管理,两者结合能有效提升开发效率。...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...

    Android 生成和PULL解析xml

    本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...

    android下解析xml文件的demo

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

Global site tag (gtag.js) - Google Analytics