android解析plist文件

plist,即property list,是苹果手机软件开发中经常用到的存储文件格式,其实质就是XML文件,但是它遵循一定的格式。比如包含一些指定的元素,如plist,array,string,key等。苹果提供了解析该类文件的机制,可惜在安卓开发工具中却没有提供。经常遇到的情况是,在开发苹果和安卓手机软件的时候,要统一资源文件,这个时候,我们可以采用GitHub中提供的开源android-plist-parser解决方案。

比如我们要解析一个全国省市区的一个plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>0</key>
	<dict>
		<key>北京市</key>
		<dict>
			<key>0</key>
			<dict>
				<key>北京市</key>
				<array>
					<string>东城区</string>
					<string>西城区</string>
					<string>朝阳区</string>
					<string>丰台区</string>
					<string>石景山区</string>
					<string>海淀区</string>
					<string>门头沟区</string>
					<string>房山区</string>
					<string>通州区</string>
					<string>顺义区</string>
					<string>昌平区</string>
					<string>大兴区</string>
					<string>怀柔区</string>
					<string>平谷区</string>
					<string>密云县</string>
					<string>延庆县</string>
				</array>
			</dict>
		</dict>
	</dict>
        ...
        ...
        ...
</dict>
</plist>

那么如何在android中解析呢?


一:在GitHub上下载android-plist-parser

https://github.com/tenaciousRas/android-plist-parser


二:解压下载的包,并导入android项目的类路径里。


三:解析该文件,并将解析信息打印在控制台。(因为该文件不算太小,因此在新线程中运行,防止主线程卡死)

new Thread(new Runnable() {
		@Override
		public void run() {
			PListXMLParser parser = new PListXMLParser();                // 基于SAX的实现
			PListXMLHandler handler = new PListXMLHandler();
			parser.setHandler(handler);
			
			try {
				parser.parse(getAssets().open("area.plist"));        // area.plist是你要解析的文件,该文件需放在assets文件夹下
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			PList actualPList = ((PListXMLHandler) parser.getHandler()).getPlist();
			Dict root = (Dict) actualPList.getRootElement();

			Map<String,PListObject> provinceCities = root.getConfigMap();
					
			for(int i=0; i<provinceCities.keySet().size();i++) {
			
				Dict provinceRoot = (Dict) provinceCities.get(String.valueOf(i));	
				Map<String,PListObject> province = provinceRoot.getConfigMap();
				
				String provinceName = province.keySet().iterator().next();
				System.out.println("省份为:" + provinceName);						// 打印省份
				
				Dict cityRoot = (Dict) province.get(provinceName);
				
				Map<String,PListObject> cities = cityRoot.getConfigMap();
				
				for(int j=0;j<cities.keySet().size();j++) {
					Dict city = (Dict) cities.get(String.valueOf(j));
					String cityName = city.getConfigMap().keySet().iterator().next();
					System.out.println("城市为:" + cityName);						// 打印城市
					Array districts = city.getConfigurationArray(cityName);
					for(int k=0;k<districts.size();k++) {
						com.longevitysoft.android.xml.plist.domain.String district = (com.longevitysoft.android.xml.plist.domain.String) districts.get(k);
						System.out.println("地区为:" + district.getValue());		// 打印地区
					}
				}
				
			}
			
		}
		
	}).start();


area.plist放在我的资源里,需要的可以在这里下载。


你可能感兴趣的:(android,iPhone,plist)