Mega Code Archive

 
Categories / Java / XML
 

A Program to Display the Input from a SAX Parser

//Example XML document /*  An XML Document <?xml version="1.0" standalone="yes"?> <person>      <name>Joe Wang</name>      <phone type="home">306 555-9999</phone>      <email>joe@yoursite.net;</email> </person> */ import java.io.IOException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; public class SAXDump {   static public void main(String[] arg) {     String filename = null;     if (arg.length == 1) {       filename = arg[0];     } else {       usage();     }     // Create a new factory that will create the parser.     SAXParserFactory spf = SAXParserFactory.newInstance();     // Create the XMLReader to be used to parse the document.     XMLReader reader = null;     try {       SAXParser parser = spf.newSAXParser();       reader = parser.getXMLReader();     } catch (Exception e) {       System.err.println(e);       System.exit(1);     }     // Specify the error handler and the content handler.     reader.setErrorHandler(new MyErrorHandler());     reader.setContentHandler(new MyContentHandler());     // Use the XMLReader to parse the entire file.     try {       InputSource is = new InputSource(filename);       reader.parse(is);     } catch (SAXException e) {       System.exit(1);     } catch (IOException e) {       System.err.println(e);       System.exit(1);     }   }   private static void usage() {     System.err.println("Usage: SAXDump <filename>");     System.exit(1);   } } class MyContentHandler implements ContentHandler {   private Locator locator;   /**    * The name and of the SAX document and the current location within the    * document.    */   public void setDocumentLocator(Locator locator) {     this.locator = locator;     System.out.println("-" + locator.getLineNumber() + "---Document ID: "         + locator.getSystemId());   }   /** The parsing of a document has started.. */   public void startDocument() {     System.out.println("-" + locator.getLineNumber()         + "---Document parse started");   }   /** The parsing of a document has completed.. */   public void endDocument() {     System.out.println("-" + locator.getLineNumber()         + "---Document parse ended");   }   /** The start of a namespace scope */   public void startPrefixMapping(String prefix, String uri) {     System.out.println("-" + locator.getLineNumber()         + "---Namespace scope begins");     System.out.println("     " + prefix + "=\"" + uri + "\"");   }   /** The end of a namespace scope */   public void endPrefixMapping(String prefix) {     System.out.println("-" + locator.getLineNumber()         + "---Namespace scope ends");     System.out.println("     " + prefix);   }   /** The opening tag of an element. */   public void startElement(String namespaceURI, String localName,       String qName, Attributes atts) {     System.out.println("-" + locator.getLineNumber()         + "---Opening tag of an element");     System.out.println("       Namespace: " + namespaceURI);     System.out.println("      Local name: " + localName);     System.out.println("  Qualified name: " + qName);     for (int i = 0; i < atts.getLength(); i++) {       System.out.println("       Attribute: " + atts.getQName(i) + "=\""           + atts.getValue(i) + "\"");     }   }   /** The closing tag of an element. */   public void endElement(String namespaceURI, String localName, String qName) {     System.out.println("-" + locator.getLineNumber()         + "---Closing tag of an element");     System.out.println("       Namespace: " + namespaceURI);     System.out.println("      Local name: " + localName);     System.out.println("  Qualified name: " + qName);   }   /** Character data. */   public void characters(char[] ch, int start, int length) {     System.out.println("-" + locator.getLineNumber() + "---Character data");     showCharacters(ch, start, length);   }   /** Ignorable whitespace character data. */   public void ignorableWhitespace(char[] ch, int start, int length) {     System.out.println("-" + locator.getLineNumber() + "---Whitespace");     showCharacters(ch, start, length);   }   /** Processing Instruction */   public void processingInstruction(String target, String data) {     System.out.println("-" + locator.getLineNumber()         + "---Processing Instruction");     System.out.println("         Target: " + target);     System.out.println("           Data: " + data);   }   /** A skipped entity. */   public void skippedEntity(String name) {     System.out.println("-" + locator.getLineNumber() + "---Skipped Entity");     System.out.println("           Name: " + name);   }   /**    * Internal method to format arrays of characters so the special whitespace    * characters will show.    */   public void showCharacters(char[] ch, int start, int length) {     System.out.print("        \"");     for (int i = start; i < start + length; i++)       switch (ch[i]) {       case '\n':         System.out.print("\\n");         break;       case '\r':         System.out.print("\\r");         break;       case '\t':         System.out.print("\\t");         break;       default:         System.out.print(ch[i]);         break;       }     System.out.println("\"");   } } class MyErrorHandler implements ErrorHandler {   public void warning(SAXParseException e) throws SAXException {     show("Warning", e);     throw (e);   }   public void error(SAXParseException e) throws SAXException {     show("Error", e);     throw (e);   }   public void fatalError(SAXParseException e) throws SAXException {     show("Fatal Error", e);     throw (e);   }   private void show(String type, SAXParseException e) {     System.out.println(type + ": " + e.getMessage());     System.out.println("Line " + e.getLineNumber() + " Column "         + e.getColumnNumber());     System.out.println("System ID: " + e.getSystemId());   } }