Android自学笔记-9-Pull方式处理XML

在android中处理XML可以使用三种方式:DOM、SAX、PUll,这里我只是简单介绍Pull方式,其他的两个方式可以自己去找找资料。

Pull方式在我理解跟SAX原理差不多,都是不会将整个XML一次加载,而是从头开始一部分一部分的加载,然后通过一些事件判断节点,比如会有文档开始/结束事件、标签开始/结束事件等,通过判断事件的类型及内容能够确定当前到达的XML节点,然后构造数据。下面给出一个简单的例子,在例子中只是使用了START_TAG事件:

package com.mxy.pull;

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

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

import com.mxy.MainActivity;

import android.util.Log;
import android.util.Xml;

public class PullParseXml {
    
    
    public void PullParseXML(){
        
        
        XmlPullParser parser = Xml.newPullParser();
        InputStream ins = MainActivity.class.getClassLoader().getResourceAsStream("data.xml");
		try {
			parser.setInput(ins, "utf-8");
			
			int type = parser.getEventType();
			//设置到文档结束的时候,退出循环
			while(type != XmlPullParser.END_DOCUMENT){
				String name = null;
				String id = null;
				switch (type) {
				case XmlPullParser.START_TAG:
					if("student".equals(parser.getName())){
						id = parser.getAttributeValue(0);
						Log.i("mxy", "student id=" + id);
					}else if("name".equals(parser.getName())){
						name = parser.nextText();
						Log.i("mxy", "name=" + name);
					}
					break;
				case XmlPullParser.END_TAG:
					//处理TAG结束事件
					break;
				case XmlPullParser.TEXT:
					break;
				//还有其他的事件
				default:
					break;
				}
				
				//这句很重要,将当前的节点类型设置为下一个,以便进入下次循环
				type = parser.next();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
}
下面简单介绍一下构造一个XML文件,最简单的就是我们可以使用字符串去拼接一段XML,这种方式最简单最易理解,但是有一点很容发生错误。所以我们可以使用XmlSerializer来构造一个XML数据。

下面给出一个小例子,是生成一段简单的XML,并将其保存到外部SD卡上:

/**
     * Xml序列话
     * 1 直接拼字符串
     * 2 使用XmlSerializer进行序列话
     */
	private void xmlSerializerMethod() {
		XmlSerializer serializer = Xml.newSerializer();
        File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");
        //这里获取的地址是/storage/sdcard/
        Log.i("mxy",Environment.getExternalStorageDirectory().toString());
        try {
        	//需要给serializer设置一个Output否则我们序列化的xml,无法取出
        	StringWriter writer = new StringWriter();  
            serializer.setOutput(writer); 
        	
			FileOutputStream fos = new FileOutputStream(file);
			serializer.startDocument("utf-8", true);
			
			serializer.setOutput(fos, "utf-8");
			serializer.startTag(null, "sms");
			
			serializer.startTag(null, "name");
			serializer.attribute(null, "id", "1");
			
			serializer.text("你好");
			
			serializer.endTag(null, "name");
			
			serializer.endTag(null, "sms");
			serializer.endDocument();
			
			//将数据写入到文件中
			fos.write(writer.toString().getBytes());
			
			fos.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
可能我写的不是很清楚,如果想进一步了解可以参看http://blog.csdn.net/liuhe688/article/details/6415593。

例子工程下载地址:http://download.csdn.net/detail/mengxiangyue/7020131

转载请注明出处:http://blog.csdn.net/mengxiangyu

Android自学笔记-9-Pull方式处理XML,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。