步骤:
解析类:
1、获取XmlPullParser解析的实例
2、设置XmlPullParser的参数
3、获取事件类型,判断是开始标签还是结束标签
4、具体判断一下解析到哪个开始标签
5、创建集合对象
6、创建解析对象
7、获取解析对象内的各标签的数据并保存到解析对象中
8、将解析对象的数据保存到集合中
主窗口类:
1、实例化控件
2、获取资产的管理者
3、调用解析类的业务方法
4、将信息展示到安卓控件上
项目目录结构
Channel类保存变量,代码如下:
package com.example.xmlparser;
public class Channel {
private String id;
private String city;
private String temp;
private String wind;
private String pm250;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getWind() {
return wind;
}
public void setWind(String wind) {
this.wind = wind;
}
public String getPm250() {
return pm250;
}
public void setPm250(String pm250) {
this.pm250 = pm250;
}
public String toString(){
return "Channel[id="+id+",city="+city+",temp="+temp
+",wind="+wind+",pm250="+pm250+"]";
}
}
WeatherParser解析xml:代码如下:
package com.example.xmlparser;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class WeatherParser {
/**
*
* 服务器是以流的形式把数据返回的
* @return
*/
public static List<Channel> parserXml(InputStream in){
//[0]声明集合对象
List<Channel> weatherLists=null;
Channel channel=null;
//[1]获取XmlPullParser解析的实例
XmlPullParser parser= Xml.newPullParser();
try {
//[2]设置XmlPullParser的参数
parser.setInput(in,"utf-8");
//[3]获取事件类型
int type=parser.getEventType();
while (type!=XmlPullParser.END_DOCUMENT){
switch (type){
case XmlPullParser.START_TAG://解析开始标签
//[4]具体判断一下解析到了哪个开始标志
if ("weather".equals(parser.getName())){
//[5]创建一个集合对象
weatherLists=new ArrayList<Channel>();
}else if ("channel".equals(parser.getName())){
//[6]创建channel对象
channel=new Channel();
//[7]获取id值
String id=parser.getAttributeValue(0);
channel.setId(id);
}else if ("city".equals(parser.getName())){
//[8]获取city的数据
String city=parser.nextText();
channel.setCity(city);
}else if ("temp".equals(parser.getName())){
//[8]获取temp的数据
String temp=parser.nextText();
channel.setTemp(temp);
}else if ("wind".equals(parser.getName())){
//[8]获取wind的数据
String wind=parser.nextText();
channel.setWind(wind);
}else if ("pm250".equals(parser.getName())){
//[8]获取pm250的数据
String pm250=parser.nextText();
channel.setPm250(pm250);
}
break;
case XmlPullParser.END_TAG://解析结束标签
//判断以下要解析的结束标签
if ("channel".equals(parser.getName())){
//把javabean对象存到集合中
weatherLists.add(channel);
}
break;
}
//不停的向下解析
type=parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return weatherLists;
}
}
主窗口类将解析出的信息显示大安卓界面
package com.example.xmlparser;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
//[1]显示天气信息
TextView tv_weather=findViewById(R.id.tv_weather);
//[1.1]获取资产的管理者 通过上下文
InputStream inputStream=getAssets().open("weather.xml");
//[2]调用我们定义的解析xml业务方法
List<Channel> weatherlists=WeatherParser.parserXml(inputStream);
StringBuffer sb=new StringBuffer();
for (Channel channel:weatherlists){
sb.append(channel.toString());
}
//[3]那数据展示到textView上
tv_weather.setText(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}