Android中 xml 的解析

刚看了osc的源码部分的中软件更新模块,其中涉及到对一个xml文件的解析,通过解析该文件来确定是不是需要更新我们的软件,这个xml就是MobileAppVersion.xml,内容如下:

  <?xml version="1.0" encoding="utf-8" ?> 
- <oschina>
- <update>
  <wp7>1.4</wp7> 
  <ios>1.5.5</ios> 
- <android>
  <versionCode>15</versionCode> 
  <versionName>1.7.1 Beta2</versionName> 
  <downloadUrl>http://www.oschina.net/uploads/osc.apk</downloadUrl> 
- <updateLog>
- <![CDATA[ 版本信息:
OSChina.NET for Android v1.7.1 Beta2
更新日志:
1.将分享功能扩充,增加通用的形式;
2.修复首页部分列表出现空数据的问题;
3.修复收藏失败老弹出用户登录框的问题;
4.修复部分手机点击菜单按钮背景空白的问题;
5.修复动弹编辑框缓存的表情内容不能以表情图片显示的问题;
6.修复下载新版本时,中途中断后,无法重新下载的问题;
7.修复多次点击检测版本弹出重叠对话框的问题;

请点击确定在线升级,如果升级失败,请到http://www.oschina.net/下载最新版本

安装包大小:1.93MB
  ]]> 
  </updateLog>
  </android>
  </update>
  </oschina>

这个文件应该是放在osc网站服务器上的吧,我是通过在网页上输入http//www.oschina.netMobileAppVersion.xml后找到的。同时也找到了源码中对该文件的分析代码:
public static Update parse(InputStream inputStream) throws IOException, AppException {
		Update update = null;
        //获得XmlPullParser解析器
        XmlPullParser xmlParser = Xml.newPullParser();
        try {        	
            xmlParser.setInput(inputStream, UTF8);
            //获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
            int evtType=xmlParser.getEventType();
			//一直循环,直到文档结束    
			while(evtType!=XmlPullParser.END_DOCUMENT){ 
	    		String tag = xmlParser.getName(); 
			    switch(evtType){ 
			    	case XmlPullParser.START_TAG:			    		
			            //通知信息
			            if(tag.equalsIgnoreCase("android"))
			    		{
			            	update = new Update();
			    		}
			            else if(update != null)
			    		{
			    			if(tag.equalsIgnoreCase("versionCode"))
				            {			      
			    				update.setVersionCode(StringUtils.toInt(xmlParser.nextText(),0));
				            }
				            else if(tag.equalsIgnoreCase("versionName"))
				            {			            	
				            	update.setVersionName(xmlParser.nextText());
				            }
				            else if(tag.equalsIgnoreCase("downloadUrl"))
				            {			            	
				            	update.setDownloadUrl(xmlParser.nextText());
				            }
				            else if(tag.equalsIgnoreCase("updateLog"))
				            {			            	
				            	update.setUpdateLog(xmlParser.nextText());
				            }
			    		}
			    		break;
			    	case XmlPullParser.END_TAG:		    		
				       	break; 
			    }
			    //如果xml没有结束,则导航到下一个节点
			    evtType=xmlParser.next();
			}		
        } catch (XmlPullParserException e) {
			throw AppException.xml(e);
        } finally {
        	inputStream.close();	
        }      
        return update;       
	}

其实之前自己就有对AndroidManifest.xml分析过,但那也是参考来的,现在发现对xml的分析是非常灵活多变的一件事情,同时也觉得osc的代码结构写的很规范,注释也很丰富,很值得学习。

你可能感兴趣的:(xml解析)