欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初涉Android之Pull解析XML文件

程序员文章站 2022-05-23 09:02:47
...

使用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 xmlpullandroid安卓开发初涉Android之Pull解析XML文件
            
    
    博客分类: android xmlpullandroid安卓开发初涉Android之Pull解析XML文件
            
    
    博客分类: android xmlpullandroid安卓开发初涉Android之Pull解析XML文件
            
    
    博客分类: android xmlpullandroid安卓开发