android中內建有pull解析器,所以我們一般都使用pull來解析。這裡解析一個最簡單的軟體升級的xml檔案,通過pull解析,擷取到軟體的版本號碼,和描述,還有,實現軟體的更新操作。
使用最常用的pull解析器來實現xml解析,實現軟體的升級功能!
1.xml檔案如下:
<?xml version="1.0" encoding="UTF-8"?><info> <version>2.0</version> <description>有新的版本了,趕快來下載吧!</description> <path>http://xxx.xxxx.xx</path></info>
2.解析xml的業務bean
public class UpdateInfo { private String version; private String description; private String path; public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPath() { return path; } public void setPath(String path) { this.path = path; }}
3.開始解析xml檔案
/** * 擷取更新資訊 * * @author piao * */public class UpdateInfoProvider { //解析xml檔案 public static UpdateInfo getUpdateInfo(InputStream is) { XmlPullParser parser = Xml.newPullParser(); UpdateInfo info = new UpdateInfo(); // 初始化解析器 try { parser.setInput(is, "utf-8"); int type = parser.getEventType(); while (type != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_TAG: if ("version".equals(parser.getName())) { String version = parser.nextText(); info.setVersion(version); } else if ("description".equals(parser.getName())) { String description = parser.nextText(); info.setDescription(description); } else if ("path".equals(parser.getName())) { String path = parser.nextText(); info.setPath(path); } break; } type = parser.next(); } return info; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } }}
4.接受xml檔案返回的資料
try { URL url=new URL(xxx); HttpURLConnection conn=url.openConnection(); conn.setRequestMethod("GET"); //連線逾時時間 conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if(code==200){ InputStream is=conn.getInputStream(); UpdateInfo updateInfo=new UpdateInfo(); updateInfo=testxml.getUpdateInfo(is); if(updateInfo!=null){ //解析成功 }else{ //解析失敗 } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }