Locator Example
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.*;
import java.io.*;
public class LocationReporter implements ContentHandler {
Locator locator = null;
public void setDocumentLocator(Locator locator) {
this.locator = locator;
}
private String reportPosition() {
if (locator != null) {
String publicID = locator.getPublicId();
String systemID = locator.getSystemId();
int line = locator.getLineNumber();
int column = locator.getColumnNumber();
String name;
if (publicID != null) name = publicID;
else name = systemID;
return " in " + name + " at line " + line
+ ", column " + column;
}
return "";
}
public void startDocument() throws SAXException {
System.out.println("Document started" + reportPosition());
}
public void endDocument() throws SAXException {
System.out.println("Document ended" + reportPosition());
}
public void characters(char[] text, int start, int length)
throws SAXException {
System.out.println("Got some characters" + reportPosition());
}
public void ignorableWhitespace(char[] text, int start, int length)
throws SAXException {
System.out.println("Got some ignorable white space"
+ reportPosition());
}
public void processingInstruction(String target, String data)
throws SAXException {
System.out.println("Got a processing instruction"
+ reportPosition());
}
// Changed methods for SAX2
public void startElement(String namespaceURI, String localName,
String qualifiedName, Attributes atts) throws SAXException {
System.out.println("Element " + qualifiedName + " started"
+ reportPosition());
}
public void endElement(String namespaceURI, String localName,
String qualifiedName) throws SAXException {
System.out.println("Element " + qualifiedName + " ended"
+ reportPosition());
}
// new methods for SAX2
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
System.out.println("Started mapping prefix " + prefix
+ " to URI " + uri + reportPosition());
}
public void endPrefixMapping(String prefix) throws SAXException {
System.out.println("Stopped mapping prefix "
+ prefix + reportPosition());
}
public void skippedEntity(String name) throws SAXException {
System.out.println("Skipped entity " + name + reportPosition());
}
// Could easily have put main() method in a separate class
public static void main(String[] args) {
XMLReader parser;
try {
parser = XMLReaderFactory.createXMLReader();
}
catch (SAXException ex) {
try {
parser = XMLReaderFactory.createXMLReader(
"org.apache.xerces.parsers.SAXParser");
}
catch (SAXException e2) {
System.err.println("Error: no parser found!");
return;
}
}
if (args.length == 0) {
System.out.println(
"Usage: java LocationReporter URL1 URL2...");
}
// Install the Content Handler
parser.setContentHandler(new LocationReporter());
// start parsing...
for (int i = 0; i < args.length; i++) {
// command line should offer URIs or file names
try {
parser.parse(args[i]);
}
catch (SAXParseException e) { // well-formedness error
System.out.println(args[i] + " is not well formed.");
System.out.println(e.getMessage()
+ " at line " + e.getLineNumber()
+ ", column " + e.getColumnNumber());
}
catch (SAXException e) { // some other kind of error
System.out.println(e.getMessage());
}
catch (IOException e) {
System.out.println("Could not report on " + args[i]
+ " because of the IOException " + e);
}
}
}
}
View Output