Android解析XML文件
按计划每周更新一篇技术博文,第一篇:《Android解析XML文件》
一、在Android应用中的XML文件来源1、本地xml文件 本地XML文件可以放在应用根目录assets文件夹、res/xml、res/raw、SDcard卡、应用的data目录等;除res/xml可直接通过getXml(int id)获取XML文档,返回一个解析器对象(XmlResourceParer:XmlResourceParer是XmlPullParser的子类),其它位置情况都可以获取XML文档,返回一个Inputstream对象,进行读取数据,获取方法分别如下:a.在res/xml目录下(推荐使用):
1.本例在获取XML文件的省份中,比较了获取三个不同位置的XML文件资源的读取方式; 2.再获取url上的XML文件时,返回的字符串进行utf-8转码,避免中文乱码(本例采用的url资源数据需要转码); 3.针对实际项目中,若xml文件过大,可以使用多线程进行解析,避免ANR,若解析时间较长,可以添加滚动提示; 4.本例存在个Bug,根据例子使用的XML文件结构把直辖市也编进省份中,例子目的是解析XML文件,实际项目是需要避免; 5.主要代码: a.各种获取XML文件资源方式public static ArrayList<City> ParseXml(XmlPullParser parser){ ArrayList<City> CityArray = new ArrayList<City>(); City CityTemp = null; int provinceId = 0; int cityId; String cityName; try { //开始解析事件 int eventType = parser.getEventType(); //处理事件,不碰到文档结束就一直处理 while (eventType != XmlPullParser.END_DOCUMENT) { //因为定义了一堆静态常量,所以这里可以用switch switch (eventType) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: //给当前标签起个名字 String tagName = parser.getName(); // Log.d("", "====XmlPullParser.START_TAG=== tagName: " + tagName); if(tagName.equals("province")){ provinceId = Integer.parseInt(parser.getAttributeValue(0)); }else if(tagName.equals("item")){ CityTemp = new City(); }else if(tagName.equals("id")){ cityId = Integer.parseInt(parser.nextText()); parser.next(); cityName = parser.nextText(); Log.v("", "id getText: "+cityId); Log.v("", "name getText: "+cityName); Log.e("", "========================="); CityTemp.setProvinceId(provinceId); CityTemp.setCityId(cityId); CityTemp.setCityName(cityName); CityArray.add(CityTemp); } break; case XmlPullParser.END_TAG: break; case XmlPullParser.END_DOCUMENT: break; } //别忘了用next方法处理下一个事件,忘了的结果就成死循环#_# eventType = parser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return CityArray; }
源码下载:http://download.csdn.net/detail/zzp16/4459459
参考引用1.谷歌天气预报:http://android.yaohuiji.com/archives/9352.android解析xml文件的三种方式:http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html3.Android APIs:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html