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