Android Pull解析XML
来源:互联网 发布:gotv源码ts 编辑:程序博客网 时间:2024/06/11 19:20
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>上海</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数据解析
阅读全文
0 0
- Android Pull解析xml
- android pull 解析xml
- android PULL 解析XML
- Android Pull解析xml
- Android Pull 解析 XML
- Android Pull 解析 XML
- Android Pull解析xml
- Android PULL解析XML
- Android Pull解析xml
- Android PULL解析XML
- android xml-----Pull解析
- android pull解析xml
- Android Pull 解析 Xml
- Android Pull解析xml
- Android PULL解析XML
- Android XML Pull解析
- android,pull解析xml
- android PULL解析XML
- HTML元素(二)
- iframe用法大全
- thinkphp框架中使用ueditor入门
- jquery
- RxJava+Retrofit+OkHttp深入浅出-终极封装五(数据持久化)
- Android Pull解析XML
- Linux Centos7.2下安装nodejs&npm配置全局路径
- c语言实现通用数据结构:通用集合(HashSet)
- java 根据给定的最小值和最大值生成指定数量的随机数
- Echarts学习记录——不等距折线图
- Robotframework环境搭建二十六:设置日志目录(续)
- JDBC查询数据库信息
- Java设计模式之《适配器模式》及应用场景
- [leetcode]109. Convert Sorted List to Binary Search Tree