pull解析

在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解析、个人感觉用还是蛮爽的、若是喜欢封装、我想应该还可以封装的更完美些、只是暂时只想到封装到这种层次了、


转载于:https://www.cnblogs.com/jenly/p/5312386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值