import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import org.apache.xerces.parsers.SAXParser; class SaxParserGrades extends DefaultHandler { static float grades[][] = new float[100][5]; int gi = -1; int nstudent = 0; public void startElement(String uri, String localName, String rawName, Attributes attributes) { if(localName.equals("hw1")) gi = 0; else if(localName.equals("hw2")) gi = 1; else if(localName.equals("project")) gi = 2; else if(localName.equals("final")) gi = 3; else if(localName.equals("student")) nstudent++; } public void endElement(String uri, String localName, String rawName) { gi = -1; } public void characters(char characters[], int start, int length) { String chData = (new String(characters, start,length)).trim(); if(chData.indexOf("\n") < 0 && chData.length() > 0){ if(gi >= 0){ grades[nstudent-1][gi] = Integer.parseInt(chData); } } } public void endDocument() { float Ave = 0; int i = 0, j = 0; System.out.println("Grades"); for(i = 0; i < nstudent ; i++){ float total = 0; for(j = 0; j < 4; j++){ total += grades[i][j]; } grades[i][4] = total/4; Ave += grades[i][4]; System.out.println("Student " + i + "=" + grades[i][4]); } Ave /= nstudent; System.out.println("Class Average =" + Ave); } } public class SaxGrades { public static void main(String[] args) { try{ SaxParserGrades SAXHandler = new SaxParserGrades(); SAXParser parser = new SAXParser(); parser.setContentHandler(SAXHandler); parser.setErrorHandler(SAXHandler); parser.parse(args[0]); } catch(Exception e){ e.printStackTrace(System.err); } } } ------------------------------------------------------------------------- Programming XML in Java John Punin John Smith 30 70 80 85 George Lucas 80 90 100 40 Elizabeth Roberts 60 95 50 90