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>
运行结果