android下使用DocumentBuilder 解析xml时,有不少坑,主要是遍历子节点时要注意。
假设有如下xml文件
<GuessStock> <Release> <VersionCode> 2 </VersionCode> <VersionName> 0.2 </VersionName> <Description> New version for test </Description> <Url> http://guessstock.qiniudn.com/GuessStock.apk </Url> <CheckSum/> <Date> 2014-09-21 17:33:00 </Date> </Release> </GuessStock>
解析代码如下:
InputStream stream = new DefaultHttpClient() .execute(new HttpGet(url)).getEntity().getContent(); DocumentBuilder myDocBuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document myDoc = myDocBuilder.parse(new InputSource(stream)); Element root = myDoc.getDocumentElement(); NodeList releaseNode = root.getElementsByTagName("Release"); if (releaseNode.getLength() < 1) { Log.v(TAG, "No release node found"); return; } for (int i = 0; i < nodeList.getLength(); i++) { String name = ""; String value = ""; Node node = nodeList.item(i); if ((node.getNodeName().equals("#text")) || (node.getChildNodes().getLength() > 3) || (node.getTextContent().trim().equals("") || node.getTextContent() == null)) { Log.w(TAG, "Invalid node."); continue; } name = node.getNodeName(); value = node.getTextContent(); if (name.equals("VersionCode")) { releaseInfo.versionCode = Integer.valueOf(value); } else if (name.equals("VersionName")) { releaseInfo.versionName = value; } else if (name.equals("Description")) { releaseInfo.whatsNew = value; } else if (name.equals("Url")) { releaseInfo.url = value; } else if (name.equals("CheckSum")) { releaseInfo.checkSum = value; } else if (name.equals("Date")) { releaseInfo.date = value; } }