先来看看要解析的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来检索里面的文本
源码下载点击打开链接