Since SAX is a Simple API for XML it provides low-level and high-performance interface for processing incoming XML-data. SAX is based on XML-element handler model. The program loading XML has to define own document-handler and pass its instance to SAX parser.

A default handler has at least callback methods handling start and stop mark-ups of XML-elements:

<!-- file: sample.xml -->
<?xml version="1.0"?>

	XML files are used to store data as a tree of elements.
	Each XML-document can have only single root element.
	It wraps all the data.



		<name>My name</name>
		<address>My address</address>


			<label>Some music</label>

			<label>Some video</label>



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

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

 * Here is an example of parsing of XML data
 * with help of document-handler.

public class SimpleSaxHandler {
     * Application entry point
     * @param args command-line arguments
    public static void main(String[] args) {
        try {
            // creates and returns new instance of SAX-implementation:
            SAXParserFactory factory = SAXParserFactory.newInstance();
            // create SAX-parser...
            SAXParser parser = factory.newSAXParser();
            // .. define our handler:
            SaxHandler handler = new SaxHandler();
            // and parse:
            parser.parse("sample.xml", handler);
        } catch (Exception ex) {
     * Our own implementation of SAX handler reading
     * a purchase-order data.
    private static final class SaxHandler extends DefaultHandler {
        // invoked when document-parsing is started:
        public void startDocument() throws SAXException {
            System.out.println("Document processing started");
        // notifies about finish of parsing:
        public void endDocument() throws SAXException {
            System.out.println("Document processing finished");
        // we enter to element 'qName':
        public void startElement(String uri, String localName, 
                String qName, Attributes attrs) throws SAXException {
            if (qName.equals("purchase-order")) {
            } else if (qName.equals("date")) {
            } /* if (...)
                        } */ else {
                throw new IllegalArgumentException("Element '" + 
                        qName + "' is not allowed here");
        // we leave element 'qName' without any actions:
        public void endElement(String uri, String localName, String qName)
        throws SAXException {
            // do nothing;