Android Pull解析XML
2017-06-12 12:02
381 查看
Pull解析xml文件
先自己写一个xml文件,存一些天气信息拿到xml文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml");
拿到pull解析器
XmlPullParser xp = Xml.newPullParser();
开始解析
拿到指针所在当前节点的事件类型int type = xp.getEventType();
事件类型主要有五种
START_DOCUMENT:xml头的事件类型
END_DOCUMENT:xml尾的事件类型
START_TAG:开始节点的事件类型
END_TAG:结束节点的事件类型
TEXT:文本节点的事件类型
如果获取到的事件类型不是END_DOCUMENT,就说明解析还没有完成,如果是,解析完成,while循环结束
while(type != XmlPullParser.END_DOCUMENT)
当我们解析到不同节点时,需要进行不同的操作,所以判断一下当前节点的name
当解析到weather的开始节点时,new出list
当解析到city的开始节点时,创建city对象,创建对象是为了更方便的保存即将解析到的文本
当解析到name开始节点时,获取下一个节点的文本内容,temp、pm也是一样
case XmlPullParser.START_TAG: //获取当前节点的名字 if("weather".equals(xp.getName())){ citys = 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("pm".equals(xp.getName())){ String pm = xp.nextText(); city.setPm(pm); } break;
当解析到city的结束节点时,说明city的三个子节点已经全部解析完了,把city对象添加至list
case XmlPullParser.END_TAG: if("city".equals(xp.getName())){ citys.add(city); }
weather.xml: 放于src目录下
<?xml version="1.0" encoding="utf-8"?> <weather> <city> <name>上海&l 4000 t;/name> <temp>23°</temp> <pm25>40</pm25> </city> <city> <name>深圳</name> <temp>26°</temp> <pm25>100</pm25> </city> <city> <name>北京</name> <temp>28°</temp> <pm25>800</pm25> </city> </weather>
public class City { private String name; private String temp; private String pm25; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTemp() { return temp; } public void setTemp(String temp) { this.temp = temp; } public String getPm25() { return pm25; } public void setPm25(String pm25) { this.pm25 = pm25; } @Override public String toString() { return "City [name=" + name + ", temp=" + temp + ", pm25=" + pm25 + "]"; } }
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文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml");
//获取xmlpull解析器
XmlPullParser xp = Xml.newPullParser();
try {
//初始化
xp.setInput(is, "gbk");
//获取当前节点的事件类型
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();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (City city : cityList) {
System.out.println(city.toString());
}
}
}
参考:Android数据解析
相关文章推荐
- Android Pull方式解析XML
- android_xml解析之 使用PULL读取XML文件 .
- Android采用PULL解析XML文档与写成XML文档
- Android Apps xml创建与解析PullXml
- android xml解析之PULL解析
- android之Pull解析XML
- Android[中级教程]第五章 XML解析之PULL解析器
- Android pull解析XML数据
- bak 6.android xml解析 XmlPullParser的使用.
- Android SAX,DOM,PULL解析XML文档
- bak 6.android xml解析 XmlPullParser的使用.
- android使用pull方式解析xml
- Android之PULL解析和生成XML
- android使用pull的方式解析xml
- android 中 xml 解析技术之 pull 解析
- Android XML解析学习——Pull方式
- Android 解析XML 之pull
- Hello Android - PULL方式解析XML
- android-XML解析Dom,Sax,Pull
- Android XML解析Pull方式———解析网络数据示例