mport android.util.Xml;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
List<City> cityList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
//解析xml文件
//1. 拿到资源文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml");
//2. 拿到解析器对象
XmlPullParser xp = Xml.newPullParser();
try {
//3. 初始化xp对象
xp.setInput(is, "gbk");
//4.开始解析
//获取当前节点的事件类型
int type = xp.getEventType();
City city = null;
while(type != XmlPullParser.END_DOCUMENT){
//判断当前解析到哪一个节点,从而确定你要做什么操作
switch (type) {
case XmlPullParser.START_TAG:
// 获取当前节点的名字
if("weather".equals(xp.getName())){
cityList = new ArrayList<City>();
}
else if("city".equals(xp.getName())){
city = new City();
}
else if("name".equals(xp.getName())){
// 获取当前节点的下一个节点的文本,把指针移动到当前节点的结束节点
String name = xp.nextText();
city.setName(name);
}
else if("temp".equals(xp.getName())){
// 获取当前节点的下一个节点的文本,把指针移动到当前节点的结束节点
String temp = xp.nextText();
city.setTemp(temp);
}
else if("pm25".equals(xp.getName())){
// 获取当前节点的下一个节点的文本,把指针移动到当前节点的结束节点
String pm25 = xp.nextText();
city.setPm25(pm25);
}
break;
case XmlPullParser.END_TAG:
if("city".equals(xp.getName())){
cityList.add(city);
}
break;
}
//把指针移动到下一个节点
type = xp.next();
}
for (City c : cityList) {
System.out.println(c.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
参考资料:
Android应用开发基础之数据存储和界面展现(三)
《疯狂Android讲义》(第2版)
|