package com.alethis.xml;
import org.xml.sax.XMLReader;
import org.xml.sax.SAXException;
import org.xml.sax.InputSource;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.*;
public class ParseUsingSAX {
public final static void main(String[] args) {
try {
File f = new File("c:\\project\\xml\\in.xml");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
InputSource is = new InputSource(br);
/*
* Possible parsers:
* org.apache.xerces.parsers.SAXParser
* org.apache.crimson.parser.XMLReaderImpl
* gnu.xml.aelfred2.XmlReader
* com.bluecast.xml.Piccolo
* oracle.xml.parser.v2.SAXParser
*/
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
parser.setContentHandler(new ContentHandlerImpl());
parser.parse(is);
System.out.println("DONE");
}
catch (SAXException se) {
System.out.println("SAX exception: " + se.getMessage());
}
catch (IOException ioe) {
System.out.println("IO exception: " + ioe.getMessage());
}
}
}
class ContentHandlerImpl implements ContentHandler {
private Locator locator;
public void setDocumentLocator(Locator locator) {
this.locator = locator;
}
public void startDocument() throws SAXException {
System.out.println(getLocation() + " startDocument");
}
public void endDocument() throws SAXException {
System.out.println(getLocation() + " endDocument");
}
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
System.out.println(getLocation() + " startElement /" + namespaceURI + "/" + localName + "/" + qName + "/");
for (int i = 0; i < atts.getLength(); i++) {
System.out.println(" attribute: /" + atts.getURI(i) + "/" + atts.getLocalName(i) + "/" + atts.getQName(i) + "/" + atts.getType(i) + "/" + atts.getValue(i) + "/");
}
}
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
System.out.println(getLocation() + " endElement /" + namespaceURI + "/" + localName + "/" + qName + "/");
}
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.print(getLocation() + " characters /");
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 '\f': System.out.print("\\f"); break;
case '\t': System.out.print("\\t"); break;
default: System.out.print(ch[i]);
}
}
System.out.println("/");
}
public void startPrefixMapping(String prefix, String uri) throws SAXException {
System.out.println(getLocation() + " start prefix mapping /" + prefix + "/" + uri + "/");
}
public void endPrefixMapping(String prefix) throws SAXException {
System.out.println(getLocation() + "end prefix mapping /" + prefix + "/");
}
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
System.out.println(getLocation() + " ignorable whitespace of length " + length);
}
public void processingInstruction(String target, String data) throws SAXException {
System.out.println(getLocation() + " processing instruction /" + target + "/" + data + "/");
}
public void skippedEntity(String name) throws SAXException {
System.out.println(getLocation() + " skipped entity /" + name + "/");
}
public String getLocation() {
if (locator == null) {
return "";
}
else {
return "(" + locator.getLineNumber() + ", " + locator.getColumnNumber() + ")";
}
}
}