本文介绍android中使用pull来解析
先自己写一个
<??><weather> <city> <name>广州</name> <temp>35</temp> <pm>23</pm> </city> <city> <name>上海</name> <temp>30</temp> <pm>26</pm> </city> <city> <name>北京</name> <temp>29</temp> <pm>55</pm> </city></weather>
在定义一个City类
package com.wuyudong.pullparser.domain;public class City { private String name; private String tmp; private String pm; @Override public String toString() { return "City [name=" + name + ", tmp=" + tmp + ", pm=" + pm + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTmp() { return tmp; } public void setTmp(String tmp) { this.tmp = tmp; } public String getPm() { return pm; } public void setPm(String pm) { this.pm = pm; } }
拿到
InputStream is = getClassLoader().getResourceAsStream("weather.
拿到pull解析器
开始解析
拿到指针所在当前节点的事件类型
int type = xp.getEventType();
* 事件类型主要有五种
* START_DOCUMENT: * END_DOCUMENT: * START_TAG:开始节点的事件类型
* END_TAG:结束节点的事件类型
* TEXT:文本节点的事件类型
如果获取到的事件类型不是END_DOCUMENT,就说明解析还没有完成,如果是,解析完成,while循环结束
while(type != * 当我们解析到不同节点时,需要进行不同的操作,所以判断一下当前节点的name
* 当解析到weather的开始节点时,new出list
* 当解析到city的开始节点时,创建city对象,创建对象是为了更方便的保存即将解析到的文本
* 当解析到name开始节点时,获取下一个节点的文本内容,temp、pm也是一样
case //获取当前节点的名字
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 if("city".equals(xp.getName())){
citys.add(city);
}
完整代码如下:
package com.wuyudong.pullparser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.import com.wuyudong.pullparser.domain.City;import android.os.Bundle;import android.app.Activity;import android.util.import android.view.View;public class MainActivity extends Activity { List<City> citys; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v) { // 得到 InputStream is = getClassLoader().getResourceAsStream("weather.); // 获取pull解析器 try { xp.setInput(is, "utf-8"); // 获取当前节点的事件类型 int type = xp.getEventType(); City city = null; while (type != switch (type) { case // 获取当前节点的名字 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.setTmp(temp); } else if ("pm".equals(xp.getName())) { String pm = xp.nextText(); city.setPm(pm); } break; case if ("city".equals(xp.getName())) { citys.add(city); } break; default: break; } // 把指针移动到下一个节点,并且返回该节点的事件类型 type = xp.next(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } for (City city : citys) { System.out.println(city.toString()); } }}
运行程序结果如图:
images/loading.gif' data-original="http://images2015.cnblogs.com/blog/617081/201606/617081-20160605170307446-1193261659.jpg" />
原标题:Android pull解析xml文件
关键词:Android