Mega Code Archive

 
Categories / Java Tutorial / XML
 

A Program to Display the Input from a SAX Parser

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002 */ 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; class MyContentHandler implements ContentHandler {   private Locator locator;   public void setDocumentLocator(Locator locator) {     this.locator = locator;     System.out.println("-" + locator.getLineNumber() + "---Document ID: " + locator.getSystemId());   }   public void startDocument() {     System.out.println("-" + locator.getLineNumber() + "---Document parse started");   }   public void endDocument() {     System.out.println("-" + locator.getLineNumber() + "---Document parse ended");   }   public void startPrefixMapping(String prefix, String uri) {     System.out.println("-" + locator.getLineNumber() + "---Namespace scope begins");     System.out.println("     " + prefix + "=\"" + uri + "\"");   }   public void endPrefixMapping(String prefix) {     System.out.println("-" + locator.getLineNumber() + "---Namespace scope ends");     System.out.println("     " + prefix);   }   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) + "\"");     }   }   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);   }   public void characters(char[] ch, int start, int length) {     System.out.println("-" + locator.getLineNumber() + "---Character data");     showCharacters(ch, start, length);   }   public void ignorableWhitespace(char[] ch, int start, int length) {     System.out.println("-" + locator.getLineNumber() + "---Whitespace");     showCharacters(ch, start, length);   }   public void processingInstruction(String target, String data) {     System.out.println("-" + locator.getLineNumber() + "---Processing Instruction");     System.out.println("         Target: " + target);     System.out.println("           Data: " + data);   }   public void skippedEntity(String name) {     System.out.println("-" + locator.getLineNumber() + "---Skipped Entity");     System.out.println("           Name: " + name);   }   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());   } } public class SAXDump {   static public void main(String[] arg) {     SAXParserFactory spf = SAXParserFactory.newInstance();     XMLReader reader = null;     try {       SAXParser parser = spf.newSAXParser();       reader = parser.getXMLReader();     } catch (Exception e) {       System.err.println(e);       System.exit(1);     }     reader.setErrorHandler(new MyErrorHandler());     reader.setContentHandler(new MyContentHandler());     try {       InputSource is = new InputSource("test.xml");       reader.parse(is);     } catch (SAXException e) {       System.exit(1);     } catch (IOException e) {       System.err.println(e);       System.exit(1);     }   } } //File: test.xml <roots>   <a>     <b>text</b>   </a> </roots> -1---Document ID: file:///C:/Java_Dev/eclipse31/Eclipse/test.xml -1---Document parse started -1---Opening tag of an element Namespace: Local name: Qualified name: roots -2---Character data "\n " -2---Opening tag of an element Namespace: Local name: Qualified name: a -3---Character data "\n " -3---Opening tag of an element Namespace: Local name: Qualified name: b -3---Character data "text" -3---Closing tag of an element Namespace: Local name: Qualified name: b -4---Character data "\n " -4---Closing tag of an element Namespace: Local name: Qualified name: a -5---Character data "\n" -5---Closing tag of an element Namespace: Local name: Qualified name: roots -6---Document parse ended