In addition to common XML-element handling SAX allows access to their attributes. Since XML-attributes are placed in the openning tag of XML-elements, handler can access them in it start-element method.

The set of attributes is representes by a map object, from which any attribute-value can be taken by its name:

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

	All XML elements may have attributes.
	Sometimes it is more comfortable to use an attribute
	instead of nested element.

<purchase-order date="2005-10-31" number="12345">

	<purchased-by name="My name">
			since address may be too complex for attribute
			value, we place it to a dedicated element
		<address>My address</address>

			here is an example of empty element
			i.e. containing no nested elements
		<item code="687" type="CD" label="Some music" />
		<item code="129851" type="DVD" label="Some video"/>


import javax.xml.parsers.SAXParser;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import org.xml.sax.Attributes;
import javax.xml.parsers.SAXParserFactory;

 * Here is sample of reading attributes of a given XML element.

public class SampleOfReadingAttributes {
     * 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 {
        // we enter to element 'qName':
        public void startElement(String uri, String localName,
                String qName, Attributes attrs) throws SAXException {
            if (qName.equals("purchase-order")) {
                // order date value as String:
                String date = attrs.getValue("date");
                // order number as a String:
                String number = attrs.getValue("number");
                System.out.println("Order #" + number + " date is '" +
                        date + "'");

Parent Category: Java SE Tips