Android 中使用Pull解析XML文件

一、首先先看XML文件结构内容:

<?xml version="1.0" encoding="utf-8"?>
<entitys>
	<entity>
	    <name>张三</name>
	    <age>30</age>
	</entity>
	<entity>
	    <name>李四</name>
	    <age>40</age>
	</entity>
<entitys>


很简单,XML文件有两个对象信息。OK!下面我们就来看看在Android开发中,怎样去解析这个XML文件,并且拿到里面的值显示到UI上。

二、XML的解析方式有很多种,比如:DOM解析、SAX解析、Pull解析等等... 在这里我就不做详细解释了。下面我们这个案例所采用的就是Pull解析方式。
1.首先我们先来看下整个案例的工程结构:



2.新建类 XmlLoader 用来专门解析XML文件,里面一个使用Pull解析XML的方法,和一个关闭流的方法

package com.qiulong.xmlloadtest;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.util.Xml;

public class XmlLoader {
	
	/**
	 * 加载XML配置文件
	 * @param context
	 * @return
	 */
	public static ArrayList<User> loadUserEntityFromAsset(Context context){
		ArrayList<User> list = null;
		User entity = null;
		InputStream in = null;
		try {
			in = context.getAssets().open("text.xml");
			XmlPullParser parser = Xml.newPullParser();
			parser.setInput(in, "UTF-8");
			int eventType = parser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
				// 判断当前事件是否为文档开始事件
				case XmlPullParser.START_DOCUMENT:
					list = new ArrayList<User>();
					break;
					// 判断当前事件是否为标签元素开始事件
				case XmlPullParser.START_TAG:
					if (parser.getName().equals("entity")) { // 判断开始标签元素是否是book
						entity = new User();
					} else if (parser.getName().equals("name")) {
						entity.setName(parser.nextText());
					} else if (parser.getName().equals("age")) {
						entity.setAge(parser.nextText());
					}
					break;
					// 判断当前事件是否为标签元素结束事件
				case XmlPullParser.END_TAG:
					if (parser.getName().equals("entity")) {
						list.add(entity);
					} 
					break;
				}
				// 进入下一个元素并触发相应事件
				eventType = parser.next();
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		} finally {
			colseStream(in);//关闭流
		}
		return list;
	}
	
	
	/**
	 * 关闭流
	 * @param in InputStream
	 */
	public static void colseStream(InputStream in) {
		try {
			if (in != null) {
				in.close();
			}
		} catch (Exception e) {
		}
	}
	
}


3.下面是布局文件,很简单的一个布局,就一个线性布局,然后通过代码往里面添加视图。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:gravity="center">

    <LinearLayout
        android:id="@+id/lin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"/>

</LinearLayout>

4.最后是Activity,初始化控件后,先解析XML文件,得到值,然后循环遍历创建TextView来显示内容。
package com.qiulong.xmlloadtest;

import java.util.List;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.app.Activity;
import android.graphics.Color;

public class MainActivity extends Activity {

	private LinearLayout lin;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		lin = (LinearLayout)this.findViewById(R.id.lin);
		
		List<User> list = XmlLoader.loadUserEntityFromAsset(this);
		for (int i = 0; i < list.size(); i++) {
			TextView name = new TextView(this);
			name.setText(list.get(i).getName());
			name.setTextSize(20);
			name.setTextColor(Color.RED);
			lin.addView(name);
			
			TextView age = new TextView(this);
			age.setText(list.get(i).getAge()+"");
			age.setTextSize(20);
			name.setTextColor(Color.RED);
			lin.addView(age);
		}
	}

}

下面我们来看看最后的运行效果图:
Android 中使用Pull解析XML文件_第1张图片


很简单,很实用的一个小案例,希望对您有所帮助,有不好的地方欢迎指正,共同进步!谢谢!(转载请注明出处)


你可能感兴趣的:(xml,pull解析,Android开发,文档,xml解析)