pull解析一些特殊类型的XML文件

先来看看要解析的XML




    
        北京
    
    
        天津
    
    
        上海
    
    
        重庆
    
    
        香港
    
    
        澳门
    
    
        沈阳
        大连
        鞍山
        抚顺
        本溪
        丹东
        锦州
        营口
        阜新
        辽阳
        铁岭
        朝阳
        盘锦
        葫芦岛
    
    
        哈尔滨
        齐齐哈尔
        鸡西
        鹤岗
        双鸭山
        大庆
        伊春
        佳木斯
        牡丹江
        七台河
        黑河
    
    
        长春
        吉林
        四平
        辽源
        通化
        白山
        松原
        白城
        延吉
    
    
        呼和浩特
        包头
        乌海
        赤峰
        通辽
        鄂尔多斯
        呼伦贝尔
        巴彦淖尔
        乌兰察布
        乌兰浩特
        二连浩特
    
    
        乌鲁木齐
        克拉玛依
        吐鲁番
        昌吉
        博乐
        库尔勒
        阿克苏
        阿图什
        喀什
        和田
        伊宁
        塔城
        阿勒泰
    
    
        西宁
    
    
        拉萨
    
    
        兰州
        嘉峪关
        金昌
        白银
        天水
        武威
        张掖
        平凉
        酒泉
        庆阳
        定西
        陇南
        临夏
        合作
    
    
        银川
        石嘴山
        吴忠
        固原
        中卫
    
    
        西安
        铜川
        宝鸡
        咸阳
        渭南
        延安
        汉中
        榆林
        安康
        商洛
    
    
        太原
        大同
        阳泉
        长治
        晋城
        朔州
        晋中
        运城
        忻州
        临汾
        吕梁
    
    
        石家庄
        唐山
        秦皇岛
        邯郸
        邢台
        保定
        承德
        沧州
        廊坊
        衡水
    
    
        济南
        青岛
        淄博
        枣庄
        东营
        烟台
        潍坊
        济宁
        泰安
        威海
        日照
        莱芜
        临沂
        德州
        聊城
        滨州
        菏泽
    
    
        南京
        无锡
        徐州
        常州
        苏州
        南通
        连云港
        淮安
        盐城
        扬州
        镇江
        泰州
        宿迁
    
    
        合肥
        芜湖
        蚌埠
        淮南
        马鞍山
        淮北
        铜陵
        安庆
        黄山
        滁州
        阜阳
        宿州
        巢湖
        六安
        毫州
        池州
        宣城
    
    
        郑州
        开封
        洛阳
        平顶山
        安阳
        鹤壁
        新乡
        焦作
        濮阳
        许昌
        漯河
        三门峡
        南阳
        商丘
        信阳
        周口
        驻马店
    
    
        武汉
        黄石
        十堰
        宜昌
        襄樊
        鄂州
        荆门
        孝感
        荆州
        黄冈
        咸宁
        随州
        恩施
    
    
        成都
        自贡
        攀枝花
        泸州
        德阳
        绵阳
        广元
        遂宁
        内江
        乐山
        南充
        眉山
        宜宾
        内广安
        达州
        雅安
        巴中
        资阳
    
    
        昆明
        曲靖
        玉溪
        保山
        昭通
        丽江
        思茅
        临沧-lincang
    
    
        贵阳
        六盘水
        遵义
        安顺
        铜仁
        兴义
        毕节
        凯里
        都匀
    
    
        长沙
        株洲
        湘潭
        衡阳
        邵阳
        岳阳
        常德
        张家界
        益阳
        郴州
        永州
        怀化
        娄底
        吉首
    
    
        南昌
        萍乡
        九江
        新余
        鹰潭
        赣州
        吉安
        宜春
        抚州
        上饶
    
    
        杭州
        宁波
        温州
        嘉兴
        湖州
        绍兴
        金华
        衢州
        舟山
        台州
        丽水
    
    
        福州
        厦门
        莆田
        三明
        泉州
        漳州
        南平
        龙岩
        宁德
    
    
        广州
        韶关
        深圳
        珠海
        汕头
        佛山
        江门
        湛江
        茂名
        肇庆
        惠州
        梅州
        汕尾
        河源
        阳江
        清远
        东莞
        中山
        潮州
        揭阳
        云浮
    
    
        南宁
        柳州
        桂林
        梧州
        北海
        防城港
        钦州
        贵港
        玉林
        百色
        贺州
        河池
        来宾
        崇左
    
    
        海口
        三亚
    
    
        台北
        高雄
        台中
    

再看看解析方法

   public InputStream getInputStreamFromAssets(String fileName) {
	try {
	    InputStream inputStream = getResources().getAssets().open(fileName);
	    return inputStream;
	} catch (IOException e) {
	    e.printStackTrace();
	}
	return null;
    }

    public static ArrayList Parse(InputStream provinceIS) {
	ArrayList provinceArray = new ArrayList();
	try {
	    // 定义工厂 XmlPullParserFactory
	    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

	    // 定义解析器 XmlPullParser
	    XmlPullParser parser = factory.newPullParser();

	    // 获取xml输入数据
	    parser.setInput(provinceIS, "utf-8");

	    provinceArray = ParseXml(parser);
	} catch (XmlPullParserException e) {
	    e.printStackTrace();
	}

	return provinceArray;
    }

    public  ArrayList ParseXml(XmlPullParser parser) {
	ArrayList provinceArray = new ArrayList();
	CityBean provinceTemp = null;
	List cityName = null;
	try {
	    // 开始解析事件
	    int eventType = parser.getEventType();
	    // 处理事件,不碰到文档结束就一直处理
	    while (eventType != XmlPullParser.END_DOCUMENT) {
		// 因为定义了一堆静态常量,所以这里可以用switch
		String tagName = parser.getName();
		switch (eventType) {
		case XmlPullParser.START_DOCUMENT:
		    // 不做任何操作或初开始化数据
		    break;

		case XmlPullParser.START_TAG:
		    // 解析XML节点数据
		    // 获取当前标签名字
		    if (tagName.equals("string-array")) {
			provinceTemp = new CityBean();
			cityName = new ArrayList();
			provinceTemp.setProvinceName(parser.getAttributeValue(0));
		    } else if (tagName.equals("item")) {
			cityName.add(parser.nextText());
			provinceTemp.setCityName(cityName);
		    }
		    break;
		case XmlPullParser.END_TAG:
		    // 单节点完成,可往集合里边添加新的数据
		    if (tagName.equals("string-array"))
			provinceArray.add(provinceTemp);
		    break;
		case XmlPullParser.END_DOCUMENT:
		    break;
		}
		// 别忘了用next方法处理下一个事件,忘了的结果就成死循环#_#
		eventType = parser.next();
	    }
	} catch (XmlPullParserException e) {
	    e.printStackTrace();
	} catch (IOException e) {
	    e.printStackTrace();
	}

	return provinceArray;
    }
解析的原理很简单,就是用 string-array item 等Tag来检索里面的文本 

源码下载点击打开链接


你可能感兴趣的:(Android应用开发)