Hi There!

I'm Dan Schlegel, an Associate Professor in the Computer Science Department at SUNY Oswego

SAX Parser Example

Main.java

import org.xml.sax.SAXException;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

public class Main {
    @SuppressWarnings("CatchAndPrintStackTrace")
    public static void main(String[] args){
        SAXParserFactory spf = SAXParserFactory.newInstance();
        try {
            InputStream xmlInput  = new FileInputStream("student.xml");
            SAXParser saxParser = spf.newSAXParser();
            StudentXMLParser sxp = new StudentXMLParser();
            saxParser.parse(xmlInput, sxp);

            System.out.println("\n*** Read Students ***");
            for (Student s : sxp.getStudents())
                System.out.println(s);
        }
        catch(SAXException|ParserConfigurationException|IOException e){
            e.printStackTrace();
        }
    }
}

Student.java

public class Student {

    private int id;
    private String name;
    private String address;

    public Student(int id, String name, String address){
        this.id = id;
        this.name = name;
        this.address = address;
    }

    @Override
    public String toString(){
        return name + " (" + id + ") lives at " + address;
    }
}

StudentXMLParser.java

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.List;

public class StudentXMLParser extends DefaultHandler {

    private List students;

    private String buffer; 
    
    private int studentId;
    private String studentName;
    private String studentAddress; 

    @Override
    public void startDocument() throws SAXException {
        System.out.println("Start document");
        students = new ArrayList<>();
    }

    @Override
    public void startElement(String namespaceURI,
                             String localName,
                             String qName, 
                             Attributes atts) throws SAXException {
        System.out.println("Start element: " + qName);
        if(qName.equals("student")){
            studentId = Integer.parseInt(atts.getValue("id"));
            System.out.println("id  " + atts.getValue("id"));
        }
           
    }

    @Override
    public void endElement(String namespaceURI,
                           String localName,
                           String qName) throws SAXException {
        System.out.println("End element: " + qName);

        if (qName.equals("address"))
            studentAddress = buffer;
        if (qName.equals("name"))
            studentName = buffer;
        if (qName.equals("student")){
            students.add(new Student(studentId, studentName, studentAddress));
            studentId = -1;
            studentName = "";
            studentAddress = "";
        }

    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("End document");
    }

    @Override
    public void characters(char ch[], int start, int length)
        throws SAXException {
        buffer = new String(ch, start, length);
        System.out.println("Chars: " + buffer);
    }

    public List getStudents(){
        return students;
    }
}

student.xml



  
    Sherlock Holmes
    
221B Baker Street
John Watson
221B Baker Street