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

本文介绍了一个用于解析XML文件中城市数据的方法。通过定义特定的标签如string-array和item,可以有效地提取并组织中国各城市的名称数据。提供的解析方法使用了XmlPullParser进行逐标签解析,并将数据封装为CityBean对象存入ArrayList。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看看要解析的XML

<?xml version="1.0" encoding="utf-8"?>
<resources>

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

</resources>
再看看解析方法

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

    public static ArrayList<CityBean> Parse(InputStream provinceIS) {
	ArrayList<CityBean> provinceArray = new ArrayList<CityBean>();
	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<CityBean> ParseXml(XmlPullParser parser) {
	ArrayList<CityBean> provinceArray = new ArrayList<CityBean>();
	CityBean provinceTemp = null;
	List<String> 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<String>();
			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来检索里面的文本 

源码下载点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值