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的解析方式有很多种,比如:DOM解析、SAX解析、Pull解析等等... 这里采用Pull解析的方式。

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>

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);
		}
	}

}

效果图:


以上内容仅供参考和学习,如有不好的地方欢迎指正和建议,谢谢!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值