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);
    }
      //获取到src文件夹下的资源文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml"); //拿到pull解析器对象
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())){
//创建city集合对象,用于存放city的javabean
cityList = new ArrayList<City>();
}
else if("city".equals(xp.getName())){
//创建city的javabean对象
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;
case XmlPullParser.END_TAG:
if("city".equals(xp.getName())){
//把city的javabean放入集合中
cityList.add(city);
}
break; } //把指针移动到下一个节点,并返回该节点的事件类型
type = xp.next();
} for (City c : cityList) {
System.out.println(c.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

最新文章

  1. Android基础之Activity四种启动模式
  2. Javascript字数统计
  3. Android Sudoku应用挂掉的问题
  4. 异常处理——毕向东Java基础教程学习笔记
  5. A380上11万一张的机票什么享受?来看看
  6. LeetCode 125. Valid Palindrome
  7. MySQL存储过程、函数和游标
  8. Java 基础之认识 Annotation
  9. mysql基础(mysql数据库导入到处) 很基础很实用
  10. leetcode[87] Partition List
  11. ArcGis SOE(server object extensions)之REST Template初体验
  12. Nagios 监控系统架构
  13. 2018-2019-2 20165313 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
  14. 缓存:前端页面缓存、服务器缓存(依赖SQL)MVC3
  15. SpringCloud入门之Spring Boot多环境配置切换指南
  16. 002_性能测试工具wrk安装与使用
  17. VS Code打造一个完美的Springboot开发环境
  18. iOS自动布局——Masonry详解
  19. vulcanjs 开源工具方便快速开发react graphql meteor 应用
  20. mybatis支持的jdbc类型

热门文章

  1. 用jQuery 处理XML-- jQuery与XML
  2. (转载)SQL Server 2005 日志文件过大处理
  3. golang安装卸载 linux+windows+raspberryPI 平台
  4. oracle创建临时表
  5. 洛谷P1126 机器人搬重物
  6. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程05:技能读表》
  7. 【Kafka入门】Kafka入门第一篇:基础概念篇
  8. 【Java基础】继承的一些总结
  9. MVC client validation after PartialView loaded via Ajax MVC3中 弹出 Dialog时候 提交的时候 使用 Jquery 不验证 form表单 的解决办法
  10. 成都Uber优步司机奖励政策(2月21日)