Android学习-- 使用Pull解析XML文件

转自http://blog.csdn.net/a352193394/article/details/18605557感谢博主提供

解析XML文件是非常常用的功能,在Android客户端中,经常与服务器通信都需要xml文件的支持,我们这里介绍一个

简单的xml文件的解析,就是使用android中的pull方法进行解析。在java中,有dom解析和sax解析,这个pull解析有些类

似于sax解析,他也是一行一行的读取然后解析内容的方法.

首先看一下这个简单的xml文件

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <infos>  
  4.   
  5.     <city id="1">  
  6.         <temp>-1℃/5℃</temp>  
  7.         <weather>多云</weather>  
  8.         <wind>南风3-4级</wind>  
  9.         <name>上海</name>  
  10.         <pm>200</pm>  
  11.     </city>  
  12.   
  13. <city id="2">  
  14.         <temp>-1℃/5℃</temp>  
  15.         <weather>多云</weather>  
  16.         <wind>南风3-4级</wind>  
  17.         <name>北京7-8</name>  
  18.         <pm>800</pm>  
  19.     </city>  
  20.   
  21.   
  22. <city id="3">  
  23.         <temp>-7℃/5℃</temp>  
  24.         <weather>多云</weather>  
  25.         <wind>南风3-4级</wind>  
  26.         <name>哈尔滨</name>  
  27.         <pm>100</pm>  
  28.     </city>  
  29.   
  30. </infos>  


然后我们直接解析这个xml文件,在textview中显示一下

这里是代码,首先是业务Bean

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.bird.weather;  
  2.   
  3. public class WeatherBean {  
  4.   
  5.     private int id;  
  6.     private String name;  
  7.     private String wind;  
  8.     private String weather;  
  9.     private String temp;  
  10.     private String pm;  
  11.       
  12.       
  13.   
  14.     @Override  
  15.     public String toString() {  
  16.         return "WeatherBean [id=" + id + ", name=" + name + ", wind=" + wind  
  17.                 + ", weather=" + weather + ", temp=" + temp + ", pm=" + pm  
  18.                 + "]";  
  19.     }  
  20.   
  21.     public int getId() {  
  22.         return id;  
  23.     }  
  24.   
  25.     public void setId(int id) {  
  26.         this.id = id;  
  27.     }  
  28.   
  29.     public String getName() {  
  30.         return name;  
  31.     }  
  32.   
  33.     public void setName(String name) {  
  34.         this.name = name;  
  35.     }  
  36.   
  37.     public String getWind() {  
  38.         return wind;  
  39.     }  
  40.   
  41.     public void setWind(String wind) {  
  42.         this.wind = wind;  
  43.     }  
  44.   
  45.     public String getWeather() {  
  46.         return weather;  
  47.     }  
  48.   
  49.     public void setWeather(String weather) {  
  50.         this.weather = weather;  
  51.     }  
  52.   
  53.     public String getTemp() {  
  54.         return temp;  
  55.     }  
  56.   
  57.     public void setTemp(String temp) {  
  58.         this.temp = temp;  
  59.     }  
  60.   
  61.     public String getPm() {  
  62.         return pm;  
  63.     }  
  64.   
  65.     public void setPm(String pm) {  
  66.         this.pm = pm;  
  67.     }  
  68. }  

然后是解析xml文件的主要代码

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.bird.weather;  
  2.   
  3. import java.io.InputStream;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import org.xmlpull.v1.XmlPullParser;  
  8.   
  9. import android.util.Xml;  
  10.   
  11. public class ParseXml {  
  12.   
  13.     public static List<WeatherBean> parse(InputStream is) {  
  14.         List<WeatherBean> list = null;  
  15.         WeatherBean bean = null;  
  16.         try {  
  17.             XmlPullParser parser = Xml.newPullParser();  
  18.             // 初始化解析器  
  19.             parser.setInput(is, "utf-8");  
  20.   
  21.             int type = parser.next();  
  22.             while (type != XmlPullParser.END_DOCUMENT) {  
  23.                 switch (type) {  
  24.                 case XmlPullParser.START_TAG:  
  25.                     if ("infos".equals(parser.getName())) {  
  26.                         list = new ArrayList<WeatherBean>();  
  27.                     } else if ("city".equals(parser.getName())) {  
  28.                         bean = new WeatherBean();  
  29.                         bean.setId(Integer.valueOf(parser.getAttributeValue(0)));  
  30.                     } else if ("temp".equals(parser.getName())) {  
  31.                         String temp = parser.nextText();  
  32.                         bean.setTemp(temp);  
  33.                     } else if ("weather".equals(parser.getName())) {  
  34.                         String weather = parser.nextText();  
  35.                         bean.setWeather(weather);  
  36.                     } else if ("wind".equals(parser.getName())) {  
  37.                         String wind = parser.nextText();  
  38.                         bean.setWind(wind);  
  39.                     } else if ("name".equals(parser.getName())) {  
  40.                         String name = parser.nextText();  
  41.                         bean.setName(name);  
  42.                     } else if ("pm".equals(parser.getName())) {  
  43.                         String pm = parser.nextText();  
  44.                         bean.setPm(pm);  
  45.                     }  
  46.                     break;  
  47.   
  48.                 case XmlPullParser.END_TAG:  
  49.                     if ("city".equals(parser.getName())) {  
  50.                         // 一个城市的信息处理完毕  
  51.                         list.add(bean);  
  52.                         bean = null;  
  53.                     }  
  54.                     break;  
  55.                 }  
  56.   
  57.                 type = parser.next();  
  58.             }  
  59.         } catch (Exception e) {  
  60.             e.printStackTrace();  
  61.         }  
  62.         return list;  
  63.     }  
  64. }  

最后在mainactivity中使用这个代码,使用类加载器完成这个简单的功能

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.bird.weather;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.os.Bundle;  
  6. import android.app.Activity;  
  7. import android.widget.TextView;  
  8.   
  9. public class MainActivity extends Activity {  
  10.   
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_main);  
  15.           
  16.         TextView tv =  (TextView) findViewById(R.id.tv);  
  17.         List<WeatherBean> list = ParseXml.parse(MainActivity.class.getClassLoader().getResourceAsStream("test.xml"));  
  18.         StringBuffer sb = new StringBuffer();  
  19.         for(WeatherBean bean : list){  
  20.             String str = bean.toString();  
  21.             sb.append(str);  
  22.             sb.append("\n");  
  23.         }  
  24.           
  25.         tv.setText(sb.toString());  
  26.     }  
  27.   
  28.       
  29. }  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值