pull解析
发布时间:2020-12-16 00:38:20 所属栏目:百科 来源:网络整理
导读:在android里面、pull解析应该是用到的非常多的、而每次给你一个xml让你解析、无数次的去重复几乎相同结构的代码、而感觉着实的有些无奈、而大部分作为C/S间交互用到的xml的文件格式大多都是相同的、有没有想象下、将解析这个繁琐的流程进行封装下、以便更好
在android里面、pull解析应该是用到的非常多的、而每次给你一个xml让你解析、无数次的去重复几乎相同结构的代码、而感觉着实的有些无奈、而大部分作为C/S间交互用到的xml的文件格式大多都是相同的、有没有想象下、将解析这个繁琐的流程进行封装下、以便更好更方便的调用、好了、不多说、直接上封装好的代码:
/** * 解析XML * @param inputStream * @param encoding * @param startNode * @param nodes * @return */ public static List<HashMap<String,String>> parserXml(InputStream inputStream,String encoding,String startNode,String... nodes){ List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>(); HashMap<String,String> map = null; try { XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); parser.setInput(inputStream,encoding); int evenType = parser.getEventType(); while (evenType!=XmlPullParser.END_DOCUMENT) { String nodeName = parser.getName(); switch (evenType) { case XmlPullParser.START_TAG: if(startNode.equals(nodeName)){ map = new HashMap<String,String>(); } for(int i=0;i<nodes.length;i++){ if(nodes[i].equalsIgnoreCase(nodeName)){ String temp = parser.nextText(); map.put(nodes[i],temp); LogUtils.logI("节点:"+nodes[i]+"t----------->t"+temp); } } break; case XmlPullParser.END_TAG: if(startNode.equals(nodeName)&&map!=null){ list.add(map); } break; } evenType = parser.next(); } } catch (XmlPullParserException e) { LogUtils.logE(CLAZZ,"解析出错:"+e.getMessage()); } catch (IOException e) { LogUtils.logE(CLAZZ,"IO异常:"+e.getMessage()); } return list; }上面的xml解析是通过传入的 InputStream来进行解析、也可以通过直接解析 String、要想直接解析String、可将上面传参改为String类型并将 parser.setInput(inputStream,encoding);改为 parser.setInput(new StringReader(string));便可以直接解析字符串形式的xml文件、 ps:平时总结封装的这个pull解析方法、虽然这个通过pull解析xml的方法不是万能的、但是解决了正对于一般二级节点的xml解析、在开发的时候、针对于列表形式的xml解析、个人感觉用还是蛮爽的、若是喜欢封装、我想应该还可以封装的更完美些、只是暂时只想到封装到这种层次了、 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |