public static Collection<Statistic> parse(File inFile) throws IOException, XmlPullParserException { Collection<Statistic> results = new ArrayList<Statistic>(); FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(inFile); bis = new BufferedInputStream(fis); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(false); XmlPullParser parser = factory.newPullParser(); parser.setInput(bis, null); // check that the first tag is <javancss> expectNextTag(parser, "javancss"); // skip until we get to the <packages> tag while (parser.getDepth() > 0 && (parser.getEventType() != XmlPullParser.START_TAG || !"packages".equals(parser.getName()))) { parser.next(); } while (parser.getDepth() > 0 && (parser.getEventType() != XmlPullParser.START_TAG || !"package".equals(parser.getName()))) { parser.next(); } while (parser.getDepth() >= 2 && parser.getEventType() == XmlPullParser.START_TAG && "package".equals(parser.getName())) { Map<String, String> data = new HashMap<String, String>(); String lastTag = null; String lastText = null; int depth = parser.getDepth(); while (parser.getDepth() >= depth) { parser.next(); switch (parser.getEventType()) { case XmlPullParser.START_TAG: lastTag = parser.getName(); break; case XmlPullParser.TEXT: lastText = parser.getText(); break; case XmlPullParser.END_TAG: if (parser.getDepth() == 4 && lastTag != null && lastText != null) { data.put(lastTag, lastText); } lastTag = null; lastText = null; break; } } if (data.containsKey("name")) { Statistic s = new Statistic(data.get("name")); s.setClasses(Long.valueOf(data.get("classes"))); s.setFunctions(Long.valueOf(data.get("functions"))); s.setNcss(Long.valueOf(data.get("ncss"))); s.setJavadocs(Long.valueOf(data.get("javadocs"))); s.setJavadocLines(Long.valueOf(data.get("javadoc_lines"))); s.setSingleCommentLines(Long.valueOf(data.get("single_comment_lines"))); s.setMultiCommentLines(Long.valueOf(data.get("multi_comment_lines"))); results.add(s); } parser.next(); } } catch (XmlPullParserException e) { throw new IOException2(e); } finally { if (bis != null) { bis.close(); } if (fis != null) { fis.close(); } } return results; }