首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android解析XML资料

2012-09-29 
Android解析XML文件按计划每周更新一篇技术博文,第一篇:《Android解析XML文件》一、在Android应用中的XML文件

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目录下(推荐使用):



Android解析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













1楼zhengshuzhang昨天 04:02
写得很详细,分析也很全面,受教了

热点排行