XmlPullParser解析XML文件

XmlUtil.java

package com.example.xml.xmlutil;

import java.io.IOException;
import java.io.StringReader;
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.example.xml.model.City;

public class XmlUtil {
	
	public static List<City> parseXml(String xmlString){
		List<City> list = new ArrayList<City>();
		City city = null;
		try {
			//使用android自带的XmlPullParser工具类解析xml字符串
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			XmlPullParser parser = factory.newPullParser();
			parser.setInput(new StringReader(xmlString));
			int eventType = parser.getEventType();
			//循环每个标签直到文档结束
			while(eventType != XmlPullParser.END_DOCUMENT){
				switch (eventType) {
				case XmlPullParser.START_DOCUMENT:
					break;
				case XmlPullParser.START_TAG:
					if("city".equals(parser.getName())){
						city = new City();
						//另一种方式:获取此标签下属性标签内的值
						//city.setName(parser.getAttributeValue(null, "name"));
					} else if("name".equals(parser.getName())){
						city.setName(parser.nextText());
					}
					break;
				case XmlPullParser.END_TAG:
					if("city".equals(parser.getName())){
						list.add(city);
						city = null;
					}
					break;
				default:
					break;
				}
				eventType = parser.next();
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}
}
MainActivity.java

package com.example.xml;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import com.example.xml.model.City;
import com.example.xml.xmlutil.XmlUtil;

public class MainActivity extends Activity {
	private Spinner spinner;
	private ArrayAdapter<String> adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		spinner = (Spinner) this.findViewById(R.id.spinner1);
		String xmlString = "<?xml version='1.0' encoding='UTF-8'?><citys><city><name>北京</name></city><city><name>上海</name></city></citys>";
		List<String> list = getDataSource(XmlUtil.parseXml(xmlString));
		//设置下拉列表的适配器(数据提供方式)
		adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item,list);
		spinner.setAdapter(adapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	private List<String> getDataSource(List<City> cityList){
		List<String> list = new ArrayList<String>();
		for(int i=0;i<cityList.size();i++){
			list.add(cityList.get(i).getName());
		}
		return list;
	}
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/textView1"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/textView1" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="97dp"
        android:text="所属城市:" />

</RelativeLayout>

运行结果



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值