Android上实现一个简单的天气预报APP(五) 解析XML

时间:2022-10-31 08:00:03

学习参考资源:https://www.gitbook.com/book/zhangqx/mini-weather/details

前面我们设置好了基本的屏幕布局、通过url获取到了网络中的天气预报数据,接下来我们要将这个XML格式的天气数据解析开来。

通过xmlPullParser解析xml数据

1.待解析的xml格式数据

Android上实现一个简单的天气预报APP(五) 解析XML

2.根据标签值,获取标签数据

因为我们这个网页中fengli、fengxiang等标签出现了不止一次,因此我们设置了计数器以便只打印第一次

parseXML(String)函数如下:

private void parseXML(String xmlData)
{
int fengliCount = 0;
int fengxiangCount = 0;
int dateCount = 0;
int highCount = 0;
int lowCount = 0;
int typeCount = 0;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));

int eventType = xmlPullParser.getEventType();
Log.d("MWeater","start parse xml");

while(eventType!=xmlPullParser.END_DOCUMENT)
{
switch (eventType)
{
//文档开始位置
case XmlPullParser.START_DOCUMENT:
Log.d("parse","start doc");
break;
//标签元素开始位置
case XmlPullParser.START_TAG:
if(xmlPullParser.getName().equals("city"))
{
eventType=xmlPullParser.next();
Log.d("city",xmlPullParser.getText());
}else if(xmlPullParser.getName().equals("updatetime"))
{
eventType=xmlPullParser.next();
Log.d("updatetime",xmlPullParser.getText());
}else if(xmlPullParser.getName().equals("wendu"))
{
eventType=xmlPullParser.next();
Log.d("wendu",xmlPullParser.getText());
}else if(xmlPullParser.getName().equals("fengli") && fengliCount==0 )
{
eventType=xmlPullParser.next();
Log.d("fengli",xmlPullParser.getText());
fengliCount++;
}else if(xmlPullParser.getName().equals("shidu"))
{
eventType=xmlPullParser.next();
Log.d("shidu",xmlPullParser.getText());
}else if(xmlPullParser.getName().equals("fengxiang") && fengxiangCount== 0)
{
eventType=xmlPullParser.next();
Log.d("fengxiang",xmlPullParser.getText());
fengxiangCount++;
}else if(xmlPullParser.getName().equals("pm25"))
{
eventType=xmlPullParser.next();
Log.d("pm25",xmlPullParser.getText());
}else if(xmlPullParser.getName().equals("quality"))
{
eventType=xmlPullParser.next();
Log.d("quelity",xmlPullParser.getText());
}else if(xmlPullParser.getName().equals("date") && dateCount==0 )
{
eventType=xmlPullParser.next();
Log.d("date",xmlPullParser.getText());
dateCount++;
}else if(xmlPullParser.getName().equals("high") && highCount==0 )
{
eventType=xmlPullParser.next();
Log.d("high",xmlPullParser.getText());
highCount++;
}else if(xmlPullParser.getName().equals("low") && lowCount==0 )
{
eventType=xmlPullParser.next();
Log.d("low",xmlPullParser.getText());
lowCount++;
}else if(xmlPullParser.getName().equals("type") && typeCount==0 )
{
eventType=xmlPullParser.next();
Log.d("type",xmlPullParser.getText());
typeCount++;
}
break;
case XmlPullParser.END_TAG:
break;
}
eventType=xmlPullParser.next();
}
}catch (Exception e)
{
e.printStackTrace();
}
}

3.在获取网页数据之后,调用这个函数

Android上实现一个简单的天气预报APP(五) 解析XML

运行一下!

Android上实现一个简单的天气预报APP(五) 解析XML