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.
-->

<purchase-order>

	<date>2005-10-31</date>
	<number>12345</number>

	<purchased-by>
		<name>My name</name>
		<address>My address</address>
	</purchased-by>

	<order-items>

		<item>
			<code>687</code>
			<type>CD</type>
			<label>Some music</label>
		</item>

		<item>
			<code>129851</code>
			<type>DVD</type>
			<label>Some video</label>
		</item>

	</order-items>

</purchase-order>


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) {
            ex.printStackTrace(System.out);
        }
    }
    
    /**
     * 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;
        }
    }
}