1:import javax.xml.parsers.*;     // Includes SAXParser and SAXParserFactory
   2:import org.xml.sax.*;           // Needed for SAXException
   3:import org.xml.sax.helpers.*;   // Needed to include the DefaultHandler
   4:import java.io.*;
   5:
   6:// A Simple SAX Application using JAXP with Namespace support
   7:public class MyParser{
   8:    private SAXParserFactory factory; // Creates parser factory
   9:    private SAXParser saxParser; // Holds a parser object
  10:
  11:    private DefaultHandler handler; // Defines the handler for this parser
  12:    
  13:    public MyParser() throws SAXException{
  14:        try{
  15:            factory = SAXParserFactory.newInstance();
  16:            factory.setNamespaceAware(true);        
  17:            saxParser = factory.newSAXParser();
  18:                        
  19:            // Set Content Handlers
  20:            handler = new MyDefaultHandler();
  21:            
  22:        } catch (ParserConfigurationException e){
  23:            e.printStackTrace();
  24:        } catch (SAXException e){
  25:            e.printStackTrace();
  26:        }
  27:    }
  28:    
  29:    public void parseDocument(String xmlFile){
  30:        try{
  31:            saxParser.parse(xmlFile, handler); // Parses file using handler
  32:        } catch (SAXException e){
  33:            e.printStackTrace();
  34:        } catch (IOException e){
  35:            e.printStackTrace();
  36:        } catch (Exception e){
  37:            e.printStackTrace();
  38:        }
  39:    }
  40:    
  41:    public static void main(String[] args){
  42:        try {
  43:            if (args.length != 1) {
  44:                System.out.println(
  45:                    "Usage: java SimpleJAXPns " +
  46:                    "[XML Document Filename]");
  47:                System.exit(0);
  48:            }
  49:            MyParser xmlApp = new MyParser();
  50:            xmlApp.parseDocument(args[0]);
  51:        } catch (SAXException e){
  52:            e.printStackTrace();
  53:        } catch (Exception e) {
  54:            e.printStackTrace();
  55:        }
  56:    }
  57:    
  58:    class MyDefaultHandler extends DefaultHandler{
  59:        private CharArrayWriter buff = new CharArrayWriter();
  60:        /* With a handler class, just override the methods you need to use
  61:        */
  62:        public void startElement(String uri, String local, String qName, Attributes att){
  63:            System.out.println("== Started element ==");
  64:            System.out.println("Local name: " + local);
  65:            System.out.println("Qname: " + qName);
  66:        }
  67:        
  68:        public void characters(char[] ch, int start, int length){
  69:            buff.write(ch, start, length);
  70:            
  71:            // Skip spaces and end of line markers
  72:            // A bit of a hack. Will switch to a RegEx in the future
  73:            if (buff.size() > 3){
  74:                System.out.println("Element Data: " + buff.toString());
  75:            }
  76:            buff.reset();
  77:        }
  78:
  79:        public void endElement(String uri, String local, String qName){
  80:            System.out.println("Ended element: " + local);
  81:        }
  82:        
  83:    }
  84:}
  85: