由于项目要同时对应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")@Overridepublic 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")@Overridepublic 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);}}}@Overridepublic 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();}}}

更多相关文章

  1. 王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V
  2. 关于android播放mp3与歌词同步问题收集
  3. 更改Android编译时的默认配置
  4. 中文手写输入 (一)
  5. Android实现类似excel表格的方法整理
  6. Android中设置Button的颜色形状圆角
  7. 利用Android源代码编译一个自己写的Hello World模块
  8. Android通用UI封装----“我的”页面Item
  9. Android中的持续集成CI系统、代码review、自动化代码检测:Gitlab+

随机推荐

  1. Android开发规范实战
  2. Android(安卓)Studio上用真机调试时,无法
  3. webview使用中遇到的坑
  4. Android(安卓)ApiDemos示例解析(87):Medi
  5. Android(安卓)RSS阅读器
  6. 使用 Android(安卓)Jetpack 加快应用开发
  7. Android(安卓)Studio常见问题——模拟器
  8. [置顶] Android四大组件之广播接收器(三)
  9. Android学习03
  10. Android(安卓)jni代码注册本地方法