由于项目要同时对应iphone和android两个平台,需要统一服务器端的配置文件,所以就有了这个xml解析器,用于解析已经做好iphone的配置文件。现在初步测试没有什么问题,不敢独享代码,特贴出来与大家分享,希望发现问题的朋友,不啬赐教。
/**
* .plist配置文件的解析器
* 支持array
* <plist version="1.0">
* <array>
* <dict>
* ...
* </dict>
* ...
* </array>
* </plist version="1.0">
*
* 支持Map
* <plist version="1.0">
* <dict>
* <id>key</id>
* <array>
* <dict>
* ...
* </dict>
* ...
* </array>
* ...
* </dict>
* </plist version="1.0">
*
* @author chen_weihua
*
*/
public class PlistHandler extends DefaultHandler {
private LinkedList<Object> list = new LinkedList<Object>();;
private boolean isRootElement = false;
private boolean keyElementBegin = false;
private String key;
private boolean valueElementBegin = false;
private Object root;
@SuppressWarnings("unchecked")
public Map getMapResult() {
return (Map)root;
}
@SuppressWarnings("unchecked")
public List getArrayResult() {
return (List)root;
}
@SuppressWarnings("unchecked")
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("plist".equals(localName)) {
isRootElement = true;
}
if ("dict".equals(localName)) {
if (isRootElement) {
list.addFirst(new HashMap());
isRootElement = !isRootElement;
} else {
ArrayList parent = (ArrayList)list.get(0);
list.addFirst(new HashMap());
parent.add(list.get(0));
}
}
if ("key".equals(localName)) {
keyElementBegin = true;
}
if ("true".equals(localName)) {
HashMap parent = (HashMap)list.get(0);
parent.put(key, true);
}
if ("false".equals(localName)) {
HashMap parent = (HashMap)list.get(0);
parent.put(key, false);
}
if ("array".equals(localName)) {
if (isRootElement) {
ArrayList obj = new ArrayList();
list.addFirst(obj);
isRootElement = !isRootElement;
} else {
HashMap parent = (HashMap)list.get(0);
ArrayList obj = new ArrayList();
list.addFirst(obj);
parent.put(key, obj);
}
}
if ("string".equals(localName)) {
valueElementBegin = true;
}
}
@SuppressWarnings("unchecked")
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (length > 0) {
if (keyElementBegin) {
key = new String(ch, start, length);
//Log.d("AR native", "key:" + key);
}
if (valueElementBegin) {
if (HashMap.class.equals(list.get(0).getClass())) {
HashMap parent = (HashMap)list.get(0);
String value = new String(ch, start, length);
parent.put(key, value);
} else if (ArrayList.class.equals(list.get(0).getClass())) {
ArrayList parent = (ArrayList)list.get(0);
String value = new String(ch, start, length);
parent.add(value);
}
//Log.d("AR native", "value:" + value);
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("plist".equals(localName)) {
;
}
if ("key".equals(localName)) {
keyElementBegin = false;
}
if ("string".equals(localName)) {
valueElementBegin = false;
}
if ("array".equals(localName)) {
root = list.removeFirst();
}
if ("dict".equals(localName)) {
root = list.removeFirst();
}
}
}
分享到:
相关推荐
- 自定义解析器:由于Android没有内置的.plist解析库,通常需要自定义解析类,实现XMLPullParser接口,逐行解析XML。 2. **工具类的实现**: - 可以创建一个名为`PlistParser`的工具类,包含静态方法`...
在Android平台上,解析iOS的.plist文件并展示城市选择对话框是一项跨平台的开发任务。.plist(Property List)是Apple iOS系统中用于存储配置数据、轻量级结构化信息的文件格式,通常包含XML或二进制数据。本文将...
总结,Android解析iOS的.plist城市文件并弹出对话框获取城市代码的过程包括:读取.plist文件并转换为XML,使用XMLPull解析器解析XML,构建城市数据结构,展示城市列表,监听用户选择并弹出对话框,以及处理用户在...
在Cocos2dx框架中加载和解析plist文件是一项重要的操作,特别是在处理游戏资源或配置文件时。 首先,我们需要理解`plist`文件的基本结构。Plist是Property List的缩写,它是一种XML或二进制格式的数据存储方式,...
- **XML解析器**:如DOM、SAX或JAXB,用于解析Android的Manifest.xml和iOS的Info.plist。 - **签名处理**:Java提供JSSE(Java Secure Socket Extension)框架,用于处理数字签名和证书。 4. **使用工具类**: -...
对于Android,你需要在`build.gradle`文件中添加JPush的依赖库,并同步项目。iOS则需要在Xcode的Podfile中引入JPush的相关库,然后执行`pod install`来安装。 Android集成步骤如下: 1. 在`build.gradle`中添加依赖...
4. XML解析器: 解析XML文档的工具有DOM(文档对象模型)、SAX(简单API for XML)和StAX(流式API for XML)。DOM一次性加载整个文档到内存,适合小型文档;SAX是事件驱动,只读且不需要全部加载,适合大文档;...
1. **Info.plist**:这是 iOS 应用的基本配置文件,包含了应用的元数据,如应用名称、版本号和权限设置。 2. **AppDelegate.swift**(或 .m 对于 Objective-C):应用的委托对象,负责处理应用生命周期中的事件,如...
5. `Info.plist`: 应用的配置文件,可能包含关于应用的元信息。 6. 其他支持文件,如资源图片、字体等。 通过分析这个Demo,开发者可以学习如何加载Plist文件,解析城市数据,使用UITableView或UICollectionView...
2. `AndroidManifest.xml`或`Info.plist`:Android和iOS应用的配置文件,定义了应用的基本属性和权限。 3. `build.gradle`或`Podfile`:构建文件,用于配置构建过程和依赖关系。 4. `README.md`:说明文档,介绍项目...
在压缩包中的“百度快速定位locSDK_3.3_Demo”很可能是一个完整的Android或iOS项目,包含必要的资源文件、配置文件以及示例代码。对于Android,我们可能看到如下的主要文件和组件: 1. AndroidManifest.xml:配置...
因此,本文将深入解析2019年3月9日版本的大华SDK,探讨如何在Android和iOS平台上进行有效的集成与使用。 首先,对于Android平台,大华的SDK集成过程中,开发者需要注意对默认Gradle配置的修改。Gradle是Android开发...
2. JSON与XML解析:如果数据文件是以JSON或XML格式存在,就需要用到解析库来读取数据。对于iOS开发,可以使用Foundation框架中的NSJSONSerialization或XMLParser;如果是JavaScript,可以使用JSON.parse()或DOM解析...
"AliPaySDK"是阿里巴巴为开发者提供的支付宝支付SDK,它包含了Android和iOS平台的支付接口、文档和必要的配置文件。在UE4项目中,我们通常会将这个SDK作为一个插件来引入,以便于管理和更新。 UE4插件系统是一个...
对于Android应用,通常包含以下几个关键部分:`AndroidManifest.xml`(应用配置文件),`MainActivity.java`(主活动类),`res`目录(资源文件),`build.gradle`(构建脚本)。对于iOS应用,关键组件有:`Info....
6. `Manifest.xml` 或 `Info.plist`: 应用配置文件,包含必要的WiFi相关权限声明。 在实际应用中,开发者会基于这些基本组件构建更复杂的测试场景,例如模拟不同的网络环境,进行压力测试,或者集成到持续集成/持续...
在Android或iOS应用中,开发者通常需要在应用程序的清单文件中配置相应的权限,比如在AndroidManifest.xml中添加访问网络和位置信息的权限。 接下来,我们来详细解析"下载解压后,修改清单文件里面的AK就可以使用...
这通常在Android Studio或Xcode的项目设置中完成,对于Android,您可以在`AndroidManifest.xml`文件中找到 `<application>` 标签内的`android:package`属性进行更改;对于iOS,则是在`Info.plist`文件中修改`...
2. **权限申请**: 对于Android和iOS平台,需要在对应的配置文件中添加访问相机的权限。在AndroidManifest.xml中添加`<uses-permission android:name="android.permission.CAMERA" />`,在iOS的Info.plist中添加`...
[ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...